2015-12-04 3 views
0

Я пытаюсь обновить свои строки в БД, не удаляя/создавая новые все время. В настоящее время моя БД создает новые записи каждый раз, когда я запускаю этот блок кода. Вместо того, чтобы спамить мою БД, я просто хочу изменить некоторые из значений.PHP/MySQL PDO/строки обновления

 <?php 
try { 
    $conn = new PDO("mysql:host=localhost;port=3306;dbname=dbname", Username, password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
catch(PDOException $e){ 
echo "Connection failed: " . $e->getMessage(); 
} 

if(isset($_POST['mUsername'])) 
{ 
    $mUsername = urldecode($_POST['mUsername']); 
    $mEvent = urldecode($_POST['mEvent']); 
    $mChat = urldecode($_POST['mChat']); 
    $mlongitude = urldecode($_POST['mlongitude']); 
    $mlatitude = urldecode($_POST['mlatitude']); 

    $sqlUPDATE = "UPDATE users 
         SET lastEvent=:lastEvent, lastChat=:lastChat, 
          lastLong=:lastLong, lastLatt=:lastLatt 
         WHERE name=:name"; 

$stmt = $conn->prepare($sqlUPDATE); 
$stmt->bindParam(':lastEvent', $mEvent); 
$stmt->bindParam(':lastChat', $mChat); 
$stmt->bindParam(':lastLong', $mlongitude); 
$stmt->bindParam(':lastLatt', $mlatitude); 
$stmt->bindParam(':name', $mUsername); 
$stmt->execute(); 
} 
echo "successfully updated"; 
?> 

Мое предположение - моя последняя строка, область результатов $. Я считаю, что это просто обработка этой новой записи вместо обновления. Как мне просто заменить значения? некоторые значения не изменятся, например, имя пользователя, а иногда и долгота/широта не будут изменены. Должен ли это быть отдельный запрос, должен ли я разделить это на два сценария? Или я могу просто ввести пустое, нулевое значение? Или это приведет к перезаписи последних координат ACTUAL, оставив мне нулевые значения? Поиск любой помощи или руководств или учебников. Спасибо всем заранее.

+0

я соблазн сказать RTM! Вы готовите запрос, который не имеет ничего подготовленного, то есть параметры '' '' 'или' names' – RiggsFolly

+0

Извините, я очень новичок в MySQL \ pdo, и я взял свой оригинальный (вставляемый) код и попытался его изменить, чтобы обновить его. – Bahamit

+1

You может просто удалить 'prepare' и' execute' и заменить их '-> query' [Но опять же руководство - ваш друг.] (http://php.net/manual/en/book.pdo.php) его в многие языки – RiggsFolly

ответ

2

большое количество синтаксической ошибки в вашем коде. Он прост в использовании bindParam

$sqlUPDATE = "UPDATE users 
         SET lastEvent=:lastEvent, lastChat=:lastChat, 
          lastLong=:lastLong, lastLatt=:lastLatt 
         WHERE name=:name";// you forget to close statement in your code 

$stmt = $conn->prepare($sqlUPDATE); 
$stmt->bindParam(':lastEvent', $mEvent); 
$stmt->bindParam(':lastChat', $mChat); 
$stmt->bindParam(':lastLong', $mlongitude); 
$stmt->bindParam(':lastLatt', $mlatitude); 
$stmt->bindParam(':name', $mUsername); 
$stmt->execute(); 

чтения http://php.net/manual/en/pdostatement.bindparam.php

2

При использовании подготовленных инструкций вы также должны сделать привычку следовать установленным правилам. Используйте именованные параметры. Попробуйте следующее:

if(isset($_POST['mUsername'])) 
{ 
    $mUsername = urldecode($_POST['mUsername']); 
    $mEvent = urldecode($_POST['mEvent']); 
    $mChat = urldecode($_POST['mChat']); 
    $mlongitude = urldecode($_POST['mlongitude']); 
    $mlatitude = urldecode($_POST['mlatitude']); 

    $sqlUPDATE = "UPDATE users SET lastEvent= :lastEvent, lastChat= :lastChat, lastLong= :lastLong, lastLatt= :lastLatt WHERE name= :name"; 
    $q = $conn->prepare($sqlUPDATE); 
    $results = $q->execute(array(':name'=>$mUsername, ':lastEvent'=>$mEvent, ':lastChat'=>$mChat, ':lastLong'=>$mlongitude, ':lastLatt'=>$mlatitude)); 
} 
+0

Надеюсь, что вы не возражаете, просто удалите ненужные двойные кавычки вокруг 'prepare ($ sqlUPDATE)' – RiggsFolly

+0

@RiggsFolly - я не видел, что, нормально, lemme пройти через это еще раз –

+2

'lastLatt =: lastLatt WHERE name =: name; "' semicolumn missing – Saty

Смежные вопросы