10

有人知道如何将 PHP 准备好的语句与 LIKE 结合起来吗?IE

"SELECT * FROM table WHERE name LIKE %?%";

4

6 回答 6

29

% 符号需要放在您分配给参数的变量中,而不是在查询中。

我不知道您使用的是 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();
于 2009-03-19T05:55:29.470 回答
9

您可以使用各自 sql 数据库的连接运算符:

# oracle
SELECT * FROM table WHERE name LIKE '%' || :param || '%'
# mysql
SELECT * from table WHERE name LIKE CONCAT('%', :param, '%')

我不熟悉其他数据库,但它们可能具有等效的功能/运算符。

于 2009-03-19T06:06:57.490 回答
2

你可以尝试这样的事情:

"SELECT * FROM table WHERE name LIKE CONCAT(CONCAT('%',?),'%')"
于 2009-03-19T15:43:13.463 回答
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);

这对我有用..

于 2014-01-30T22:11:57.000 回答
0

对我来说工作得很好,我一直在寻找答案时间,谢谢。

    $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();
于 2016-12-15T15:16:31.840 回答
0

我将为像我这样习惯于使用bindValue(...)PDO 的人改编 Chad Birch 的答案:

$st = $db->prepare("SELECT * FROM table WHERE name LIKE :name");
$st->bindValue(':name','%'.$name.'%',PDO::PARAM_STR);
$st->execute();
于 2018-04-16T20:48:17.033 回答