[英]Using variable inside prepared statement line
我正在将SQL转换为准备好的语句,但遇到了麻烦。 我的SQL查询是逐步建立的,因此变量的数量未知。 如果我想要这个:
$stmt->bind_param('sssii', $variable1, $variable2, $variable3, $startpoint, $limit);
我有两个变量:
$var1 = "sss"; <Br />
$var2 = "$variable1, $variable2, $variable3";
如何将它们合并到上面的字符串中? 我尝试了这个,但是没有正确的结果。
$stmt->bind_param('{$var1}ii', ".$var2.", $startpoint, $limit);
问题2是问题...谢谢!
您可以为以下类型执行此操作: $stmt->bind_param($var1.'ii', ...)
但不适用于参数,因为必须通过引用将其传递。 但是有解决方法。 您可以在文档注释中找到它: mysqli-stmt.bind-param
它使用引用类:
$ref = new ReflectionClass('mysqli_stmt');
$method = $ref->getMethod("bind_param");
$method->invokeArgs($stmt, $args);
$res->execute();
$args
是包含所有类型和参数的数组。 例如:
$args[] = 'sssii';
$args[] = $variable1;
$args[] = $variable2;
(...)
$args[] = $startpoint;
$args[] = $limit;
如果您具有类似value1, value2, value3
数据value1, value2, value3
可以尝试使用$args
explode
它和array_merge
。
$foo1 = 'bar1';
$foo2 = 'bar2';
$foo3 = 'bar3';
$foo4 = 'bar4';
$limit = 10;
$stmt->prepare('SELECT * FROM example_table WHERE col1=? AND col2=? AND col3=? AND col4=? LIMIT ?');
$args[] = 'ssssi';
$args[] = $foo1;
$args[] = $foo2;
$args[] = $foo3;
$args[] = $foo4;
$ref = new ReflectionClass('mysqli_stmt');
$method = $ref->getMethod('bind_param');
$method->invokeArgs($stmt, $args);
$res->execute();
查询将如下所示:
SELECT * FROM example_table WHERE col1="bar1" AND col2="bar2" AND col3="bar3" AND col4="bar4"
您必须使用双引号来获取变量插值。
$stmt->bind_param("{$var1}ii", ".$var2.", $startpoint, $limit);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.