2012-09-06 48 views
0

我有一個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); 
?> 

如果有人能幫助我,這將不勝感激!

感謝名單

+1

請不要使用'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)。 –

+0

您是否考慮過用戶編寫相同電話號碼但格式不同的困難?或者在發帖之前檢查號碼fotmatting – jtheman

回答

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)); 
     } 
    } 
} 
+0

您可以並且應該檢查電話號碼是否爲空,然後再前往數據庫進行查詢。 – KyleWpppd

+0

Ehm。數據庫中沒有該行被稱爲id。但來自電話號碼的輸入被稱爲電話號碼 –

+0

@Babboe ID是電話號碼? –

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'; 
} 

或者更好的是:一個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(); 
}