我正在尝试找到一种简单的方法来构造字符串以在 MySQLi 中传递准备好的语句,尤其是类型“isiis”。
我已经有一个包含要传递给查询的参数的数组,通过循环遍历它,我可以通过检查数组中的每个值是否都是数字来构建另一个数组,我使用 is_numeric() 函数,或者不是。
问题是,通过这样做,写入数据库的方法,我使用一个类,崩溃了。
如果我使用 str_repeat() 函数构建类型数组并为所有变量分配值“s”,它不会崩溃。
下面是一些便于理解的代码。
这是我的 $args 数组
数组 ( [0] => 1433 [1] => 2 [2] => 71 [3] => 0 [4] => 你好 [5] => 皮波 [6] => 1 [7] => 1 [8] => 1 [9] => 9 )
我只需要区分数字变量和其余变量,所以我这样做 诸如...
$fields = array();
foreach ($args as $s) {
if(is_numeric($s)){
$fields[] = 'i';
#echo "is numeric";
}
else{
#echo "is other";
$fields[] = 's';
}
}
返回的内容为
echo '<pre>'; print_r($fields); echo '</pre>';
Array
(
[0] => i
[1] => i
[2] => i
[3] => i
[4] => s
[5] => s
[6] => i
[7] => i
[8] => i
[9] => i
)
现在我以两种方式检索数据('iissi..etc,etc')
$types = implode("", $fields);
$types2 = str_repeat('s',sizeof($args));
echo printf("function implode return %s type %s and has len %s.", $types ,gettype($types), strlen($types));
echo "<br>";
echo printf("function str_repeat return %s type %s has len %s.", $types2 ,gettype($types2), strlen($types2));
第一种方法,使用implode()函数不起作用并返回:
函数 implode 返回 iiiissiiii 类型字符串且长度为 10.63
使用 str_repeat() 函数的第二种方法工作并返回:
函数 str_repeat 返回 ssssssssss 类型字符串,长度为 10.62
顺便我注意到两个字符串的长度不是整数, 应该是10,而且也略有不同。
这是我的警告。
警告:mysqli::prepare():无法在第 90 行的 /var/www/html/virtualab/engine/dbms.php 中获取 mysqli
致命错误:未捕获错误:调用 bool 上的成员函数 bind_param()
你有什么建议吗?我缺少什么?
感谢您的关注,并对糟糕的代码编写表示歉意...
使用串联而不是数组
$fields = '';
foreach ($args as $s) {
if(is_numeric($s)){
$fields .= 'i';
#echo "is numeric";
}
else{
#echo "is other";
$fields .= 's';
}
}