我正在尝试制作一个简单的网络应用。我正在创建它的用户配置文件部分,我坚持允许用户上传自己的个人资料图片。请参阅下面我正在使用的查询。
$username = $_SESSION['username'];
$insertImage = $db->prepare("UPDATE `members` SET `profile_pic` = ('$dbDirectory') WHERE `username` = $username");
$insertImage->execute($imageArray);
我无法弄清楚如何正确地将用户名会话添加到查询中。目前我刚收到错误
“SQLSTATE [42S22]:未找到列:1054未知列'VALUE'中 'where clause'“。
如果我将查询更改为此。
$insertImage = $db->prepare("UPDATE `members` SET `profile_pic` = ('$dbDirectory') WHERE `profile_pic` = `profile_pic`");
将相同的图像目录路径插入到每个用户的“profile_pic
”行中。
我很可能在这里遗漏了一些非常小的东西,但我无法解决这个问题,所以非常感谢任何指导/建议。先谢谢
答案 0 :(得分:4)
文本变量应包含在引号''
$insertImage = $db->prepare("UPDATE `members`
SET `profile_pic` = '$dbDirectory'
WHERE `username` = '$username'");
但是你应该在准备好的查询中使用参数,以避免SQL注入,然后你不必担心引用文本变量,因为PDO类都不会这样做,例如
$stmt = $db->prepare("UPDATE `members`
SET `profile_pic` = :pic
WHERE `username` = :uname");
$stmt->execute( array(':pic'=> $dbDirectory, ':uname'=>$username') );
或
$stmt = $db->prepare("UPDATE `members`
SET `profile_pic` = :pic
WHERE `username` = :uname");
$stmt->bindParam(':pic', $dbDirectory, PDO::PARAM_STR);
$stmt->bindParam(':uname', $username, PDO::PARAM_STR);
$stmt->execute();