带有变量的mysql php更新

时间:2015-02-25 02:37:33

标签: php mysql sql-update

所以我已经有一段时间了,我做的任何事情或研究都会导致更多错误。我不断收到此错误:致命错误:在非对象上调用成员函数query(),代码如下所示。 pic列用于他们上传的个人资料图片目录。

$newTarget_file = "uploads/picture.png"

....

$sql = "UPDATE users SET pic='$newTarget_file' WHERE username=:username";
if ($conn->query($sql) === TRUE) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . $conn->error;
}

这也是一个提交给他们的PHP保存他们上传的图片,目录是$ newTarget_file。这对我如何做到这一点非常令人沮丧。在此先感谢您的帮助。

基本上我想更新pic列,其中username =:username,其变量我已经$ newTarget_file。我该怎么办?

1 个答案:

答案 0 :(得分:0)

正如其他人所说,错误是因为您的连接对象不存在。

  

致命错误:在非对象上调用成员函数query()

根据您所关注的教程,您实现了这个吗?

$conn = new mysqli($servername, $dbuser, $dbpw, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

在查询尝试运行之前,您应该遇到连接错误。另外,正如迈克尔指出的那样,你不能在mysqli中使用命名参数。它仅在PDO中受支持,但您仍然可以使用占位符。你的新代码看起来应该是这样的。

if (!($stmt = $conn->prepare("UPDATE users SET pic=? WHERE username=?"))) {
    echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
    exit;
}
if (!$stmt->bind_param("ss", $newTarget_file, $username)) {
    echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
    exit;
}
if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    exit;
}
$stmt->close();