0

这是代码:

$id = intval($_POST['id']);
$score = "'" . $_POST['score'] . "'";
$shares = "'" . $_POST['shares'] . "'";

$conn = new PDO('mysql:host=localhost;dbname=news', 'root', '');
$stmt = $conn->prepare("UPDATE news SET 'shares' = :shares, 'score' = :score 
WHERE id = :id");
$stmt -> execute(array(
    'shares' => $shares,
    'score' => $score,
    'id' => $id
    ));

它不起作用。我不确定我将如何看到我认为 mysql 在某处给出的错误,并且我已经尝试了我能想到的一切。

使用双引号并立即将变量添加到语句中。

将单引号添加到共享和分数。

我该怎么做?

4

2 回答 2

1

我认为您需要从列名中删除引号,例如:

$stmt = $conn->prepare("UPDATE news SET shares = :shares, score = :score 
                                                                  WHERE id = :id");

也最好使用bindParam方法来绑定参数。

$stmt ->bindParam(':shares', $shares, PDO::PARAM_INT);
$stmt ->bindParam(':score', $score, PDO::PARAM_INT);
$stmt ->bindParam(':id', $id, PDO::PARAM_INT);
$stmt -> execute();

我假设所有字段都是 INT 类型。如果没有,请使用适当的类型进行更新。

于 2012-10-30T04:58:12.543 回答
1

我猜你忘记了执行语句中的冒号,这里是编辑后的代码。

$stmt = $conn->prepare("UPDATE news SET shares = :shares, score = :score 
WHERE id = :id");
$stmt -> execute(array(
    ':shares' => $shares,
    ':score' => $score,
    ':id' => $id
    ));
于 2012-10-30T05:13:50.857 回答