私は今、同じ問題に何度か遭遇しましたが、非常に単純で良い解決策を見つけたと思います。パラメータを複数回使用したい場合は、MySQLのUser-Defined Variable
に保存するだけです。 。
これにより、コードがはるかに読みやすくなり、PHPで追加の関数を使用する必要がなくなります。
$sql = "SET @term = :term";
try
{
$stmt = $dbh->prepare($sql);
$stmt->bindValue(":term", "%$term%", PDO::PARAM_STR);
$stmt->execute();
}
catch(PDOException $e)
{
// error handling
}
$sql = "SELECT ... FROM table WHERE name LIKE @term OR number LIKE @term";
try
{
$stmt = $dbh->prepare($sql);
$stmt->execute();
$stmt->fetchAll();
}
catch(PDOException $e)
{
//error handling
}
唯一の欠点は、追加のMySQLクエリを実行する必要があることですが、それだけの価値はあります。User-Defined Variable
MySQLではセッションにバインドされているため、変数@term
について心配する必要もありません。 マルチユーザー環境で副作用を引き起こします。