2015-03-23 4 views
-1

Я пытаюсь выполнить чрезвычайно простой запрос с помощью mysqli. Это сводит меня с ума!mysqli подготовленный оператор с while loop

Я просто хочу, чтобы $data был массивом значений из запроса sql.

Это мой код ...

$req = $app->request(); 
$hashtag = $req->get('hashtag'); 

require_once 'Slim/lib/database.php'; 

$db = connect_db(); 

$statement = $db->prepare("SELECT `content` FROM `posts` WHERE `content` LIKE ?"); 
$newhashtag = '%#' . $hashtag . '%'; 
$statement -> bind_param("s", $newhashtag); 

$statement -> execute(); 

$statement -> bind_result($result); 

while ($row = mysqli_fetch_array($statement)) { 
    $data[] = $row; 
} 

print_r($data); 

$statement -> close(); 

Я просто получаю сообщение об ошибке mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given и это не делает разницы с использованием $result или $statement на fetch_array

+0

Почему цикл while, когда у вас уже есть '$ statement-> bind_result ($ result)' – NaijaProgrammer

ответ

-1

заменить эти строки:

while ($row = mysqli_fetch_array($statement)) { 
    $data[] = $row; 
} 

с данными:

while ($row = $statement->fetch()) { 
    $data[] = $row; 
} 
+0

, ваш код возвращает это array 'Array ([0] => 1 [1] => 1)' - который по-прежнему выглядит неправильно – mikelovelyuk

+0

закомментируйте выражение '$ statement -> bind_result ($ result);' part и попробуйте обновленный цикл while. Примечание. Я обновил цикл while после вашего комментария. – NaijaProgrammer

0

Для тех, кто сталкивается с этим вопросом и считает, что принятое решение не работает (это не для меня).

Тогда попробуйте это:

$statement = $db->prepare("SELECT `content` FROM `posts` WHERE `content` LIKE ?"); 
$newhashtag = "%#$hashtag%"; 
$statement->bind_param("s", $newhashtag); 
$statement->execute(); 
$result = $statement->get_result(); 

while ($row = $result->fetch_assoc()) 
{ 
    $data[] = $row; 
} 

Это использует get_result() function, который используется для получения результата от подготовленного заявления.

Это инициализируется вне цикла while и назначается новой переменной, в данном случае $result.
Затем $result->fetch_assoc() присваивается $row и может быть доступен в пределах цикла. Доступ к каждому столбцу в виде ключа из массива, так что $row["content"] вернет содержимое из каждой строки под этим столбцом

Смежные вопросы