任何人都知道如何将PHP预处理语句与LIKE结合起来?即
"SELECT * FROM table WHERE name LIKE %?%";
答案 0 :(得分:28)
%符号需要包含在您为参数分配的变量中,而不是在查询中。
我不知道你是使用mysqli还是PDO,但是使用PDO会是这样的:
$st = $db->prepare("SELECT * FROM table WHERE name LIKE ?");
$st->execute(array('%'.$test_string.'%'));
编辑:: mysqli
以下用户。
$test_string = '%' . $test_string . '%';
$st->bind_param('s', $test_string);
$st->execute();
答案 1 :(得分:6)
您可以使用相应sql数据库的连接运算符:
# oracle
SELECT * FROM table WHERE name LIKE '%' || :param || '%'
# mysql
SELECT * from table WHERE name LIKE CONCAT('%', :param, '%')
我不熟悉其他数据库,但它们可能有一个等效的函数/运算符。
答案 2 :(得分:2)
您可以尝试这样的事情:
"SELECT * FROM table WHERE name LIKE CONCAT(CONCAT('%',?),'%')"
答案 3 :(得分:1)
在使用MYSQLI的PHP中,您需要定义一个新参数,该参数将声明为:
$stmt = mysqli_prepare($con,"SELECT * FROM table WHERE name LIKE ?");
$newParameter='%'.$query.'%';
mysqli_stmt_bind_param($stmt, "s", $newParameter);
mysqli_stmt_execute($stmt);
这对我有用..
答案 4 :(得分:0)
对于我工作得很好,我已经找了答案时间,thx。
$dbPassword = "pass";
$dbUserName = "dbusr";
$dbServer = "localhost";
$dbName = "mydb";
$connection = new mysqli($dbServer, $dbUserName, $dbPassword, $dbName);
if($connection->connect_errno)
{
exit("Database Connection Failed. Reason: ".$connection->connect_error);
}
$tempFirstName = "reuel";
$sql = "SELECT first_name, last_name, pen_name FROM authors WHERE first_name LIKE CONCAT(CONCAT('%',?),'%')";
//echo $sql;
$stateObj = $connection->prepare($sql);
$stateObj->bind_param("s",$tempFirstName);
$stateObj->execute();
$stateObj->bind_result($first,$last,$pen);
$stateObj->store_result();
if($stateObj->num_rows > 0) {
while($stateObj->fetch()){
echo "$first, $last \"$pen\"";
echo '<br>';
}
}
$stateObj->close();
$connection->close();
答案 5 :(得分:0)
对于像我这样习惯于将querySelectorAll
用于PDO的人来说,我只会调整Chad Birch的答案:
bindValue(...)