3

我有一个在 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 语法错误。

当然,在示例中,我可以绑定三个变量并在查询之前进行计算。在我的真实查询中,有更高级的计算,我需要将同一个变量绑定到多个地方。这似乎是重复和糟糕的编码实践。

有什么解决方案吗?

4

2 回答 2

1

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();

此代码只是一个示例,未经测试。

于 2013-06-14T11:17:40.160 回答
0

你应该使用 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();
    ?>
于 2017-11-07T16:05:19.960 回答