簡體   English   中英

在准備好的語句行中使用變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM