更新查询语法

时间:2013-10-15 09:45:55

标签: php mysql sql

我想用以下代码更新我的表。但是更新没有成功。

 $sql_edit = "UPDATE subscription SET name=?,email=? WHERE name=? & email=?";
        $q_edit = $pdo->prepare($sql_edit);
        $q_edit->execute(array($_POST['new_name'],$_POST['new_email'],$_POST['old_name'],$_POST['old_email']));

2 个答案:

答案 0 :(得分:0)

我怀疑这是因为你没有设置一个$ _POST变量。下面的代码检查post变量是否已设置,如果没有,则将它们设置为null的值。我已经更改了您使用的&符号,它应该是 AND

$sql_edit = "UPDATE subscription SET name=?,email=? WHERE name=? AND email=?";
        $q_edit = $pdo->prepare($sql_edit);
        $do_update = $q_edit->execute(array(
            (isset($_POST['new_name']) ? $_POST['new_name'] : null),
            (isset($_POST['new_email']) ? $_POST['new_email'] : null),
            (isset($_POST['old_name']) ? $_POST['old_name'] : null),
            (isset($_POST['old_email']) ? $_POST['old_email'] : null)
        ));

// Also check that it was executes successfully in your code
if (!$do_update)
{
echo "Failed to update";
}
else
{
echo "Update successful";
}

我建议您在发布之前检查这些值,而不是仅仅将它们放入数组中。

要检查的另一件事是您的连接未设置为隐式事务,否则您将需要将更改提交到数据库(或将其回滚):

$pdo->rollBack();

$pdo->commit();

仅当您的列设置为允许空值时才会生效。

答案 1 :(得分:0)

使用AND条件中的WHERE代替&,因为&是BITWISE运算符

    $sql_edit = "UPDATE subscription SET name=?,email=? WHERE name=? AND email=?";
    $q_edit = $pdo->prepare($sql_edit);
    $q_edit->execute(array($_POST['new_name'],$_POST['new_email'],$_POST['old_name'],$_POST['old_email']));