【问题标题】:unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) error [closed]意外''(T_ENCAPSED_AND_WHITESPACE),期望标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)错误[关闭]
【发布时间】:2023-03-11 20:13:01
【问题描述】:

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

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();
}

对此问题的任何修复(以及任何有助于提高安全性的提示)将不胜感激。

【问题讨论】:

  • 如果您切换到 IDE(例如 NetBeans、Eclipse、PHP Storm),那么包含语法错误的行将在编辑器中自动突出显示。

标签: php html mysql pdo


【解决方案1】:

问题出在这一行:

('$_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。

【讨论】:

  • 感谢您的建议!该错误已得到修复,并已实施准备好的语句。不,在我最后一个问题之后,我从 mySQLi 切换到 PDO。
  • @tmello01 不客气,我很高兴听到我能够解决这个问题,干杯
猜你喜欢
  • 1970-01-01
  • 2015-06-26
  • 2012-03-23
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 2014-07-03
  • 2011-11-07
相关资源
最近更新 更多