【问题标题】:Prepared statements in MySQLiMySQLi 中的预处理语句
【发布时间】:2012-03-17 04:49:45
【问题描述】:

我在准备好的语句(MySQLi)中进行 SQL 查询

这是查询

$register = $friend_zone->prepare("INSERT INTO users (name, username, password, email, security_answer, date, user_level, security_question) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
$register->bind_param($name, $username, $password, $email, $security_answer, $date, $user_level, $security_question);

$register->execute();

我收到警告

Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in /var/www/includes/functions.php on line 152 Notice: Undefined variable: result in /var/www/includes/functions.php on line 159 

有人可以帮忙吗?

【问题讨论】:

标签: php database mysqli prepared-statement


【解决方案1】:

您使用了错误的bind_param() 函数。第一个参数是一个包含数据类型的字符串。例如:

$register->bind_param('ssssssis', $name, $username, $password, $email, $security_answer, $date, $user_level, $security_question);

每个字母对应于它各自的变量。 s 用于字符串,i 用于整数。还有其他一些可用的。

【讨论】:

  • so 'ssssssis' 是指 $name、$username 等变量的类型 我的预感是否正确?
  • 没错。我相信这是一个类型提示功能,可以帮助防止 SQL 注入。
【解决方案2】:

试试:

$register = $friend_zone->prepare("INSERT INTO users (name, username, password, email, security_answer, date, user_level, security_question) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
$register->execute( array($name, $username, $password, $email, $security_answer, $date, $user_level, $security_question) );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多