在变量内部使用变量语句行

时间:2013-10-31 19:45:03

标签: php sql

我正在将我的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);

Var 2是问题...... 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以对此类型执行此操作:$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这样的数据,你可以尝试explodearray_merge $args


$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"

答案 1 :(得分:0)

你必须使用双引号来获得变量插值。

$stmt->bind_param("{$var1}ii", ".$var2.", $startpoint, $limit);