0

mySql データベースにアクセスする小さな php スクリプトがあります。

データベースに新しいレコードを挿入する前に、数値 (value1) がデータベース内のレコードと等しいかどうかを調べたいと思います。ウィッチもRow1にいます。

だから私はしたい:

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

誰かがこれで私を助けることができれば、それはありがたいです!

ありがとう

4

2 に答える 2

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));
        }
    }
}
于 2012-09-06T06:58:16.680 に答える
0

特定の電話番号で見つかった行を数えるのに苦労するのはなぜですか? 盲目的$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';
}

または、さらに良い$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);ことに、try-catch ブロック内で設定および更新します。これにより、更新クエリが失敗した理由を確認し、それに応じて応答できます。データベースエンジンがサポートしている$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();
}
于 2012-09-06T07:11:04.257 に答える