警告:mysqli_stmt::bind_param():尝试保护查询时,类型定义字符串中的元素数量与绑定变量的数量不匹配
Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables when trying to secure query
我想使用 bind_param 函数保护我的 php 代码免受 sql 注入,但我遇到了这个错误。我检查了 ? 和 bind_param 的数量,但它们都相等,所以我不知道我做错了什么。
我认为这是错误的来源:
$conn = mysqli_connect($servername, $username, $password, $database);
$searchText = $_POST['search'];
echo "You searched for: " . htmlspecialchars($searchText, ENT_QUOTES, 'UTF-8');
$query = $conn->prepare("SELECT * FROM recources WHERE recource_title LIKE '%?%' OR recource_topic LIKE '%?%' OR recource_author LIKE '%?%' OR recource_description LIKE '%?%';");
$query->bind_param('s', $searchText, $searchText, $searchText, $searchText);
$query->execute();
编辑:我尝试使用 $query->bind_param('ssss'
而不是 1 s,但我仍然遇到此错误。
您需要取消对占位符的引用并连接绑定中的通配符。您的错误是因为您的查询中没有占位符。
更正占位符后,您需要更正绑定调用。第一个参数是每个被绑定的变量是这样的:
bind_param('s'
真的应该
bind_param('ssss'
(因为你有 4 个变量)一个完整的例子:
$query = $conn->prepare("SELECT * FROM recources WHERE recource_title LIKE ? OR recource_topic LIKE ? OR recource_author LIKE ? OR recource_description LIKE ?;");
$wild_var = '%' . $searchText . '%';
$query->bind_param('ssss', $wild_var, $wild_var, $wild_var, $wild_var);
$query->execute();
我想使用 bind_param 函数保护我的 php 代码免受 sql 注入,但我遇到了这个错误。我检查了 ? 和 bind_param 的数量,但它们都相等,所以我不知道我做错了什么。
我认为这是错误的来源:
$conn = mysqli_connect($servername, $username, $password, $database);
$searchText = $_POST['search'];
echo "You searched for: " . htmlspecialchars($searchText, ENT_QUOTES, 'UTF-8');
$query = $conn->prepare("SELECT * FROM recources WHERE recource_title LIKE '%?%' OR recource_topic LIKE '%?%' OR recource_author LIKE '%?%' OR recource_description LIKE '%?%';");
$query->bind_param('s', $searchText, $searchText, $searchText, $searchText);
$query->execute();
编辑:我尝试使用 $query->bind_param('ssss'
而不是 1 s,但我仍然遇到此错误。
您需要取消对占位符的引用并连接绑定中的通配符。您的错误是因为您的查询中没有占位符。
更正占位符后,您需要更正绑定调用。第一个参数是每个被绑定的变量是这样的:
bind_param('s'
真的应该
bind_param('ssss'
(因为你有 4 个变量)一个完整的例子:
$query = $conn->prepare("SELECT * FROM recources WHERE recource_title LIKE ? OR recource_topic LIKE ? OR recource_author LIKE ? OR recource_description LIKE ?;");
$wild_var = '%' . $searchText . '%';
$query->bind_param('ssss', $wild_var, $wild_var, $wild_var, $wild_var);
$query->execute();