Php mysqli和bind_param-可以使用哪些参数?

Php mysqli和bind_param-可以使用哪些参数?,php,data-binding,mysqli,bind,Php,Data Binding,Mysqli,Bind,有人能确认以下前两个陈述是好的,后一个是错的吗 无效: $sql="SELECT Code, Name FROM Country WHERE Code LIKE ? LIMIT 5"; $stmt = $mysqli->prepare($sql); $stmt->bind_param("s", "C%"); $sql="SELECT Code, Name FROM Country WHERE Code LIKE ? LIMIT 5"; $stmt = $mysqli->pre

有人能确认以下前两个陈述是好的,后一个是错的吗

无效:

$sql="SELECT Code, Name FROM Country WHERE Code LIKE ? LIMIT 5";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", "C%");
$sql="SELECT Code, Name FROM Country WHERE Code LIKE ? LIMIT 5";
$stmt = $mysqli->prepare();
$stmt->bind_param("s", strtolower($_POST['code']));
无效:

$sql="SELECT Code, Name FROM Country WHERE Code LIKE ? LIMIT 5";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", "C%");
$sql="SELECT Code, Name FROM Country WHERE Code LIKE ? LIMIT 5";
$stmt = $mysqli->prepare();
$stmt->bind_param("s", strtolower($_POST['code']));
无效(绑定的不仅仅是文字值):

有效期:

$sql="SELECT Code, Name FROM Country WHERE Code LIKE ? LIMIT 5";
$stmt = $mysqli->prepare();
$stmt->bind_param("s", $_POST['code']);
我问这个问题是因为我想正确理解Mysqli准备的语句

我仍然不确定可以将哪些参数放入
bind_param()
。我可以在bind_param()中不放变量,而是放它的值(我的第一个示例)或者甚至执行一些php函数(我的第二个示例)作为参数吗

bool mysqli\u stmt::bind\u参数(字符串$types,mixed&$var1[,mixed&$…])

但我还是不清楚

我可以不放变量,而是放它的值吗(我的第一个例子)

你不能。这就是问题所在

我想正确理解Mysqli准备的基本语句

不要浪费时间,而是学习事先准备好的陈述。
它们更加明智和实用。
它有
bindValue()
方法,可以让您实现上面提到的一切


如果您必须使用mysqli API,也有一个解决方案,您可以使用mysqli之上的内置API。第一个示例是,您在
绑定参数
函数中添加了
%
。执行sql查询时,
%
将作为普通字符串存储,并且不会更改语句的功能

对于第二个示例,您最好这样做:

$string = strtolower($_POST['code']);
$sql="SELECT Code, Name FROM Country WHERE Code LIKE ? LIMIT 5";
$stmt = $mysqli->prepare();
$stmt->bind_param("s", $string);
对于第三个示例,
bind_param
将值转换为可以传递到数据库的“东西”,并且不允许更改sql语句,即sql注入。顺便说一句,您的第一个示例对
%
也做了同样的处理

对于第四个示例,它是有效的,因为它是一个周围没有函数的变量。就像我的第二个例子


希望这有帮助:)

我最好同意你的意见,但在这个问题上我不是老板。这是针对使用mysqli的项目的。很抱歉,我还不清楚。我在问题中添加了第四个示例。我说的对吗,1-3个例子是无效的,只有第4个例子是有效的?