如果Row1 =值1,更新其他行
我有一个php脚本去mySql数据库。如果Row1 =值1,更新其他行
我想看看,在数据库中插入新记录之前,如果数字(value1)等于数据库中的记录。这也在Row1中。
所以我想:
- 如果外观,进来的电话号码等于在数据库中的电话号码。如果是,则必须保持电话号码的值相同,只更新:经度,纬度&时间戳。
- 如果电话号码等于空。不要把我的数据库中的任何值。根本没有记录。
- 如果电话号码不在数据库中,也什么也不做。重复它就像值为空。
这里是我当前的PHP代码,其中有新值的时候创建新记录。
<?php
$con = mysql_connect('server', 'user_name', 'pass');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("db_name", $con);
if (isset($_REQUEST['data'])){
$json = $_REQUEST['data']; // recieve json from app
$data = json_Decode($json);
mysql_query("INSERT INTO test (id, longitude, latitude, timestamp) VALUES ('$data- >id','$data->longitude','$data->latitude','$data->timestamp')");
}
mysql_close($con);
?>
如果有人能帮助我,这将不胜感激!
感谢名单
你没有提到的电话号码字段,所以我认为是phone_number
:
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
if (isset($_REQUEST['data'])){
$data = json_decode($_REQUEST['data']);
if($data->phonenumber){
$stmt = $db->prepare("SELECT `id` FROM `test` where `id`=:phone_number");
$stmt->execute(array(':phone_number' => $data->phonenumber));
$row_count = $stmt->rowCount();
if($row_count && ($data->phonenumber != '')){
$stmt = $db->prepare("UPDATE `test` SET `longitude`=:longitude, `latitude`=:latitude, `timestamp`=:timestamp WHERE `id`=:phone_number");
$stmt->execute(array(':longitude' => $data->longitude,':latitude' => $data->latitude,':timestamp' => $data->timestamp,':phone_number' => $data->phonenumber));
}
}
}
您可以并且应该检查电话号码是否为空,然后再前往数据库进行查询。 – KyleWpppd
Ehm。数据库中没有该行被称为id。但来自电话号码的输入被称为电话号码 –
@Babboe ID是电话号码? –
为什么要通过统计发现一个特定的电话号码行的麻烦?只是检查$data->phone_number !== null
,然后执行更新查询盲目
$stmt = $pdo->prepare('UPDATE table SET longitude = :longitude, latitude = :latitude, timestamp = :timestap WHERE id = :id');
if ($stmt->execute(array(':longitude' => $data->longitude,':latitude' => $data->latitude,':timestamp' => $data->timestamp,':id' => $data->phone_number)))
{
echo 'Updated';
}
else
{
echo 'Couldn\'t update';
}
或者更好的是:一个try-catch块内设置$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
和更新,所以你可以检查为什么更新查询失败,并作出相应的反应。如果你的数据库引擎支持它,你可以使用$pdo->rollBack();
当发生更新时,它不应该,太:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try
{
$stmt = $pdo->prepare('UPDATE table SET longitude = :longitude, latitude = :latitude, timestamp = :timestap WHERE id = :id');
$stmt->execute(array(':longitude' => $data->longitude,':latitude' => $data->latitude,':timestamp' => $data->timestamp,':id' => $data->phone_number));
}
catch(PDOException $e)
{
$pdo->rollBack();//undo any changes
echo $e->getMessage();
}
请不要使用'mysql_ *'功能的新代码。他们不再被维护,社区已经开始[弃用流程](http://news.php.net/php.internals/53799)。看到[**红框**](http://php.net/mysql-connect)?相反,您应该了解[准备好的陈述](http://en.wikipedia.org/wiki/Prepared_statement)并使用[PDO](http://php.net/pdo)或[MySQLi](http:// php.net/mysqli)。如果你不能决定,试试[这篇文章](http://php.net/mysqlinfo.api.choosing)。如果你关心学习,[这里是很好的PDO教程](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。 –
您是否考虑过用户编写相同电话号码但格式不同的困难?或者在发帖之前检查号码fotmatting – jtheman