使用变量更新mysql php

使用变量更新mysql php,php,mysql,sql-update,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)

所以我已经做了一段时间了,我做的任何事情或研究都会发现更多的错误。我一直遇到这样的错误:致命错误:调用非对象上的成员函数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_文件。这真的让我很沮丧我是怎么做的。提前谢谢你的帮助


基本上我想用一个变量更新pic列,其中username=:username我已经有$newTarget_文件了。我该怎么办?

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

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

根据您正在学习的教程,您是否实现了这一点

$conn = new mysqli($servername, $dbuser, $dbpw, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
在查询尝试运行之前,您应该已经收到连接错误。此外,正如Michael指出的,您不能在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();

连接对象
$conn
不在您调用它的范围内。这是函数内部的吗?我还注意到,您将PDO样式命名参数与
query()
一起使用,这是不正确的。这应该使用
:username
作为参数。
=:
看起来您正在绑定一个值,但我没有看到bind语句。另外,为什么在
pic=.$newTarget\u文件中的
pic
之后会出现
。$newTarget\u文件
请将代码发布在定义了
$conn
的地方。我基本上一直在关注这个链接,但想添加一个变量作为更新,它不会给出更多错误,但实际上对我的数据库没有任何作用。我忘了将$username重新定义为登录的用户,而不是mysql数据库的用户。非常感谢你!不客气,Jacob,我更新了答案以显示更详细的错误报告。如果答案解决了您的问题,请务必接受。