Ошибка при попытке заставить работать PDO - PullRequest
0 голосов
/ 31 мая 2018

Это работает, я вставляю код из того, что отображается в print_r, в оператор execute, и все в порядке.

$search_items = array();
for ($x = 0; $x < $search_parts_count; $x++) {
     $search_items[] = "':search$x' => '%$search_parts[$x]%'";
}
print_r(implode(",", $search_items));

$stmt->execute(array(':search0' => '%cure%',':search1' => '%cancer%',':search2' => '%help%',':search3' => '%ongoing%'));

, но когда я делаю это:

$stmt->execute($search_items);

я получаю:

Uncaught исключение 'PDOException' с сообщением 'SQLSTATE [HY093]: недействительнономер параметра: количество связанных переменных не соответствует количеству токенов

1011

Понятия не имею, что я делаю неправильно.Любая помощь будет принята с благодарностью!

Вот утверждение:

$sql_string = 'SELECT area, file_name, title FROM meta_details WHERE' . $search_guts;
    $stmt = $conn->prepare($sql_string);

, и оно строится так:

$search_guts = '(';

    for ($x = 0; $x < $search_parts_count; $x++) {
        $search_guts .= 'title LIKE :search' . $x;
         if ($search_parts_count - 1 != $x){$search_guts .= ' OR ';}
        };

    $search_guts .= ') OR (';   

    for ($x = 0; $x < $search_parts_count; $x++) {
        $search_guts .= 'description LIKE :search' . $x;
         if ($search_parts_count - 1 != $x){$search_guts .= ' OR ';}
        };          
        $search_guts .= ')';

Спасибо!

1 Ответ

0 голосов
/ 31 мая 2018

При построении $search_items ...

$search_items[] = "':search$x' => '%$search_parts[$x]%'";

Вы создаете элемент со значением "':search$x' => '%$search_parts[$x]%'", а не запись для :search$x.Вы должны настроить как ...

$search_items[":search$x"] = "%{$search_parts[$x]}%";
...