意想不到的'' (T_ENCAPSED_AND_WHITESPACE),期望标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)错误

时间:2015-03-28 15:01:53

标签: php html mysql pdo

在注册脚本中,错误会不断弹出。代码是这样的:

try {

 $dbh = new PDO("mysql:host=$hostname;dbname=booter", $username, $password);

    echo 'Connected to database<br />';

/*** INSERT data ***/
$count = $dbh->exec("INSERT INTO members(username, password, email) VALUES ('$_POST['username']', '$hashedpassword', '$_POST['email']')");


/*** close the database connection ***/
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}

对此的任何修复(以及任何有助于安全性的提示)都将非常感激。

1 个答案:

答案 0 :(得分:2)

问题在于这一行:

('$_POST['username']', '$hashedpassword', '$_POST['email']')

这是POST数组中需要删除的引号。

但是,这根本不安全,你应该使用准备好的陈述,因为它让你对SQL injection开放。

首先为POST数组分配变量:

$username = $_POST['username'];
$hashedpassword = "The way you're getting this from";
$email = $_POST['email'];

然后使用?为占位符准备的语句:

$query= "INSERT INTO members (username, password, email) VALUES (?, ?, ?)";
$result = $dbh->prepare($query);
$count = $result->execute(array($username, $hashedpassword, $email));

有关PDO预备陈述的更多信息,请访问:


脚注:

我在发布https://stackoverflow.com/q/29177454/的另一个问题中注意到您正在使用mysqli_个功能。

如果您仍在使用mysqli_连接或代码中其他地方存在mysqli_函数,则无法混合MySQL API。