簡體   English   中英

使用SET @ variable =? mysqli內部准備好的語句

[英]Use SET @variable=? inside of mysqli prepared statement

我有一個查詢,它在mysql中使用一些變量。 查詢看起來像這樣:

SET @var1 = 1;
SET @var2 = 2;
SELECT * FROM table WHERE table.column1=@var1 
AND table.column2=@var2
AND table.colum3=@var1 * @var2;

我想發表如下准備聲明:

$sql=' SET @var1 = ?;
SET @var2 = ?;
SELECT * FROM table WHERE table.column1=@var1 
AND table.column2=@var2
AND table.colum3=@var1 * @var2;'

然后將兩個參數綁定到它。 但這在SET @ var1 =?附近給了我mysql語法錯誤。

當然,在示例中,我可以綁定三個變量並在查詢之前進行計算。 在我的實際查詢中,有更高級的計算,我需要將同一變量綁定到多個位置。 這似乎是重復的和不良的編碼實踐。

有什么解決辦法嗎?

PHP提供了開箱即用的准備好的語句和參數化查詢,您可以使用它們。

$var1 = 1;
$var2 = 2;

$connection = new PDO($dsn, $user, $password);

$sql = 'SELECT * FROM table WHERE table.column1=:var1 AND table.column2=:var2 AND table.colum3=:varSum';
$statement = $connection->prepare($sql);

$statement->bindValue(':var1', $var1, PDO::PARAM_INT);
$statement->bindValue(':var2', $var2, PDO::PARAM_INT);
$statement->bindValue(':varSum', $var1 + $var2, PDO::PARAM_INT);
$statement->execute();

此代碼僅是示例,未經測試。

您應該使用multi_query

    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDB";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    $sql=' SET @var1 = '.$v1.';
    SET @var2 = '.$v2.';
    SELECT * FROM table WHERE table.column1=@var1 
    AND table.column2=@var2
    AND table.colum3=@var1 * @var2;'

    if ($conn->multi_query($sql) === TRUE) {
        echo "New records created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $conn->close();
    ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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