警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定变量数量不匹配11

时间:2015-10-27 16:59:11

标签: php mysql mysqli

我的针对SQL注入的代码不起作用(标题中的错误消息)。

我简化了我的代码,但它仍无效。

<?php
include "conf.php";

$db = new mysqli($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS, $MYSQL_DB);

$ltime =10;
$url= 1;
$title =2;



$result = $db->prepare("INSERT INTO links VALUES ('', ?, ?, ?)");
$result->bind_param('ss', $url, $title, $ltime);
$result->execute();

我创建了DB,所有变量都是整数,第一个值是ID,它是用自动增量标志创建的。

2 个答案:

答案 0 :(得分:2)

你有:

$result->bind_param('ss', $url, $title, $ltime);

但它应该是

$result->bind_param('sss', $url, $title, $ltime);

第一个功能参数 bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
确定每个绑定变量/ sql-parameter的类型。你有三个sql参数,所以你的第一个函数参数必须指定三种类型(在这种情况下是三次s),而不仅仅是两种。

在一个侧节点上:我宁愿将mysqli :: prepare的返回值赋给一个名为$statement而不是$result的变量。

答案 1 :(得分:0)

你必须在bind_param方法中放三个“s”,因为有三个要绑定的变量

$result = $db->prepare("INSERT INTO links VALUES (NULL, ?, ?, ?)");

$result->bind_param('sss', $url, $title, $ltime);

我最好为自动增量字段而不是空字符串传递空NULL值