문제

누구든지 PHP 준비된 진술을 좋아하는 방법을 알고 있습니까? 즉

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

도움이 되었습니까?

해결책

% 부호는 쿼리 대신 매개 변수에 할당하는 변수로 가야합니다.

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

다른 팁

해당 SQL 데이터베이스의 연결 연산자를 사용할 수 있습니다.

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

나는 다른 데이터베이스와 유사하지 않지만 아마도 동등한 기능/연산자가있을 것입니다.

당신은 다음과 같은 것을 시도 할 수 있습니다 :

"SELECT * FROM table WHERE name LIKE CONCAT(CONCAT('%',?),'%')"

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

이것은 나를 위해 작동합니다 ..

내가 잘 일하기 위해, 나는 답을 찾았습니다. 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();

나는 활용하는 데 익숙한 나와 같은 사람들을 위해 Chad Birch의 대답을 적응할 것입니다. bindValue(...) PDO의 경우 :

$st = $db->prepare("SELECT * FROM table WHERE name LIKE :name");
$st->bindValue(':name','%'.$name.'%',PDO::PARAM_STR);
$st->execute();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top