【问题标题】:if Row1 = Value 1, Update other rows如果 Row1 = Value 1,则更新其他行
【发布时间】:2012-09-06 06:51:50
【问题描述】:

我有一个用于 mySql 数据库的小 php 脚本。

我想看看,在我在数据库中插入一条新记录之前,数字(value1)是否等于数据库中的一条记录。 Wich 也在第 1 行。

所以我想:

  • 查看传入的电话号码是否等于数据库中的电话号码。如果是,则必须保持电话号码相同的值,仅更新:经度、纬度和时间戳。
  • 如果电话号码为空。不要将任何值放入我的数据库中。根本没有记录。
  • 如果电话号码不在数据库中,也什么也不做。重复它,就像值为 null 一样。

这是我当前的 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);
?>

如果有人可以帮助我,将不胜感激!

感谢

【问题讨论】:

标签: php mysql json if-statement


【解决方案1】:

你没有提到电话号码字段,所以我假设是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));
        }
    }
}

【讨论】:

  • 在去db查询之前,你可以而且应该检查电话号码是否为空。
  • 嗯。不,该行在数据库中称为 id。但是来自电话号码的输入称为phonenumber
  • @Mihai lorga 是的,mySQL 中的行是 id。必须进入该行的输入称为电话号码
  • 不是phone_number,而是phonenumber
  • @MihaiIorga 知道mysql的row被称为'id',输入值为'phonenumber'也许是件好事
【解决方案2】:

为什么要费力计算找到特定电话号码的行数?只需检查$data-&gt;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';
}

或者更好:设置 $pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 并在 try-catch 块中更新,这样您就可以检查更新查询失败的原因并做出相应的响应。如果您的数据库引擎支持它,您也可以在不应该发生更新时使用$pdo-&gt;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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多