试图允许用户将配置文件pic上传到mysql数据库

时间:2016-02-19 11:30:44

标签: php mysql pdo

我正在尝试制作一个简单的网络应用。我正在创建它的用户配置文件部分,我坚持允许用户上传自己的个人资料图片。请参阅下面我正在使用的查询。

$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”行中。

我很可能在这里遗漏了一些非常小的东西,但我无法解决这个问题,所以非常感谢任何指导/建议。先谢谢

1 个答案:

答案 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();