если Row1 = значение 1, обновите другие строки

У меня есть небольшой скрипт php, который отправляется в базу данных mySql.

Я хочу посмотреть, прежде чем вставить новую запись в базу данных, если число (значение1) равно записи в базе данных. Это также находится в Row1.

Поэтому я хочу:

  • Посмотрите, соответствует ли номер телефона номеру телефона в базе данных. Если это так, то он должен поддерживать номер телефона с одинаковым значением, только обновлять: долготу, широту и временную метку.
  • Если номер телефона равен нулю. Не помещайте ни одно из значений в мою базу данных. Нет записей вообще.
  • Если номер телефона отсутствует в базе данных, также ничего не делать. Повторите его так же, как значение равно 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); ?> 

Если бы кто-нибудь мог помочь мне в этом, это было бы оценено!

Thanx

Вы не phone_number номер телефона, поэтому я предположил, что номер 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)); } } } 

Зачем пережить проблемы с подсчетом строк, найденных для определенного номера телефона? Просто проверьте значение $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, чтобы вы могли проверить, почему запрос обновления не прошел и соответствующим образом отвечает. Если ваш движок db поддерживает его, вы можете использовать $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(); }