0

だから私はしたい:

  • 入ってくる電話番号がデータベース内の電話番号と等しいかどうかを調べます。その場合、電話番号を同じ値に保つ必要があるよりも、経度、緯度、タイムスタンプのみを更新します。
  • 電話番号が null の場合。データベースに値を入れないでください。まったく記録がありません。
  • 電話番号がデータベースにない場合も、何もしません。値が null のように繰り返します。

入力から取得した電話番号はphonenumberと呼ばれます。行はidと呼ばれます

これが私のコードです:

 <?php



$db = new PDO('mysql:host=host;dbname=dbname;charset=UTF-8', 'user', 'pass',   array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

if (isset($_REQUEST['data'])){
$data = json_decode($_REQUEST['data']);
$stmt = $db->prepare("SELECT `id` FROM `locatie` where `phonenumber`=:id");
$stmt->execute(array(':phonenumber' => $data->id));
$row_count = $stmt->rowCount();
if($row_count && ($data->phonenumber != '')){
    $stmt = $db->prepare("UPDATE `locatie` SET `longitude`=:longitude,  `latitude`=:latitude, `timestamp`=:timestamp WHERE `phonenumber`=:id");
    $stmt->execute(array(':longitude' => $data->longitude,':latitude' => $data- >latitude,':timestamp' => $data->timestamp,':phonenumber' => $data->id));
 }
}

?>

私は何を間違っていますか?

4

1 に答える 1

0

準備には :id がありますが、実行パラメーターには :phone_number があります。これらは一致する必要があります。

編集: 実際には、簡単な更新を行うだけで済みます。電話番号が存在しない場合は変更されません。2 つではなく 1 つのクエリ。

$stmt = $db->prepare("UPDATE `locatie` SET `longitude`=:longitude,  `latitude`=:latitude, `timestamp`=:timestamp WHERE `id`=:id AND `phonenumber`=:phonenumber"); 
$stmt->execute(array(':longitude' => $data->longitude,':latitude' => $data- >latitude,':timestamp' => $data->timestamp,':id' => $data->id,':phonenumber' => $data->phonenumber)); 
于 2012-09-06T07:27:09.237 に答える