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;'

そして、それに 2 つのパラメータをバインドするだけです。しかし、これにより、SET @var1=?; の近くで mysql 構文エラーが発生します。

もちろん、この例では、3 つの変数をバインドして、クエリを実行する前に計算を行うことができます。私の実際のクエリには、より高度な計算があり、同じ変数を複数の場所にバインドする必要があります。そして、それは繰り返しの悪いコーディング慣行のようです。

これに対する解決策はありますか?

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 に答える