1

値 $id が列 id に既に存在するかどうかを確認したい。そうであれば、クエリを呼び出したいと思います。そうでなければ、別のクエリを実行したいと思います。

とても簡単に思えますが、私にとってはそうではありません。

ここに重要なコードがあります

if (isset($_GET['data'])) {
$data = json_decode($_GET['data'], true);
$id = $data['id'];
$latitude = $data['latitude'];
$longitude = $data['longitude'];
$timestamp = $data['timestamp'];

$result = mysql_query("SELECT * FROM locatie WHERE id='$id'");
if("id='$id'")
{
$query = "Update locatie 
SET     longitude = '$longitude',
   latitude = '$latitude',
   timestamp = '$timestamp'
WHERE id = '$id'";}
else
//Als het nummer bekend is

{
//Als het een nieuw nummer is
$query = sprintf("INSERT INTO locatie (id, longitude, latitude, timestamp) VALUES ('%s', '%s', '%s', '%s') ", mysql_real_escape_string($id) , mysql_real_escape_string($longitude),  mysql_real_escape_string($latitude), mysql_real_escape_string($timestamp));}



$result = mysql_query($query) or die('Query failed: ' . mysql_error());
echo "OK";

// Free resultset
mysql_free_result($result);
}

しかし、今ではコードは何もしません。両方のクエリが個別に正常に機能することはわかっていますが、場所から SELECT すると機能しません....

どんな助けでもいただければ幸いです

4

6 に答える 6

2

存在する場合は更新し、存在しない場合は挿入しているので、INSERT ... ON DUPLICATE KEY UPDATEを使用できます

例 (動作するはずですが、テストされていません)

$sql = sprintf("INSERT INTO locatie (id, longitude, latitude, timestamp) VALUES ('%s', '%s', '%s', '%s') ", mysql_real_escape_string($id) , mysql_real_escape_string($longitude),  mysql_real_escape_string($latitude), mysql_real_escape_string($timestamp));
$sql .= " ON DUPLICATE KEY UPDATE longitude=VALUES(longitude), latitude=VALUES(latitude),timestamp=VALUES(timestamp)";
于 2012-10-10T11:33:45.903 に答える
2

簡単に使用できます:

if( $result && mysql_num_rows($result) )

idすでにクエリに含まれているかどうかをチェックしているためです。

有効な結果チェックがあるかどうかをチェックしていないので、それも if に追加しました。

注: すべての mysql* 関数は非推奨です。代わりに pdo 関数の mysqli を使用してください。

于 2012-10-10T11:29:30.360 に答える
1
$result = mysql_query("SELECT * FROM locatie WHERE id='$id'");
if(mysql_num_rows($result) > 0)
//do something
于 2012-10-10T11:31:46.187 に答える
1

mysql_num_rows() 結果の行数を取得 http://in2.php.net/manual/en/function.mysql-num-rows.php

if($result && mysql_num_rows($result)>0){
   //$id already exist in the column id. 

}else {

}
于 2012-10-10T11:30:15.237 に答える
1

REPLACEを使用する場合、 IDチェックを実行する必要はありません。

例えば:

REPLACE INTO locatie (id, longitude, latitude, timestamp) VALUES (?,?,?,?)

詳細: http://dev.mysql.com/doc/refman/5.0/en/replace.html

于 2012-10-10T11:56:39.843 に答える
0

そのようにクエリを使用できます

if($result = mysql_query("SELECT * FROM locatie WHERE id='$id'"))
{
    // Found
}
else
{
    // Not found
}

リソースが null でない場合にのみ true を返します。

于 2012-10-10T12:30:57.843 に答える