PHP / MySQL PDO /更新行

时间:2015-12-04 10:59:49

标签: 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";
?>

我的假设是我的最后一行,即$ results区域。我相信它只是把它当作一个新的条目而不是更新。我该如何更换价值?某些值不会更改,例如用户名,有时不需要更改经度/纬度。如果我将其拆分为两个脚本,那么这必须是一个单独的查询吗?或者我可以输入一个空的空值?或者最终会覆盖ACTUAL的最后一个坐标,给我留下空值?寻找任何帮助或指南或教程。谢谢大家。

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分: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