2017-09-03 94 views
0

我不知道爲什麼我的代碼不會返回true,while循環工作正常,但存在問題。PHP的MySQLi到PDO?

$PDO_result = $db_PDO->prepare("SELECT * FROM nnm_anime INNER JOIN nnm_anime_info ON nnm_anime.a_id = nnm_anime_info.a_id WHERE a_name LIKE '?%' "); 
$PDO_result->bindParam(1, $pismenka[$i]); 
$PDO_result->execute(); 

這裏的時候,我var_dump()$PDO_result我得到陣列一個項目,因此下面的while循環應該工作:

while($row = $PDO_result->fetch(PDO::FETCH_ASSOC)) 

但事實並非如此。

工作的MySQLi:

$result = mysqli_query($connect_to_db, "SELECT * FROM nnm_anime INNER JOIN nnm_anime_info ON nnm_anime.a_id = nnm_anime_info.a_id WHERE a_name LIKE '$pismenka[$i]%' "); 

while($row = mysqli_fetch_array($result)) 
+0

不重複%不能在Param ....,我有其他問題,然後他 –

回答

2

最簡單的解決辦法是改變$pdo->fetch(PDO::FETCH_ASSOC)$pdo->fetchAll(PDO::FETCH_ASSOC)

fetchAll返回所有行的請求的查詢,而fetch只得到1行(第一)

例如:

<?php 


try { 

    $PDO_result = $db_PDO->prepare("SELECT * FROM nnm_anime INNER JOIN nnm_anime_info ON nnm_anime.a_id = nnm_anime_info.a_id WHERE a_name LIKE ?"); 

    //Execute by inserting an array: 
    if (!$PDO_result->execute([$pismenka[$i] . "%" ])) { //Added ."%" 
     die('Error!'); 
    } 

    //Fetch rows: 
    $rows = $PDO_result->fetchAll(PDO::FETCH_ASSOC); 

    //Go trough each row: 
    foreach ($rows as $row) { 
     //Do something 
    } 

    //Catch exceptions thrown by PDO 
} catch (PDOException $ex) { 
    print_r($ex); 
} 
+0

取回應該返回第一行然後第二然後第三.....如PHP.net中描述或不? –

+0

我不是100%確定的,但看看這個答案,它有點讓我想起你的問題:https://stackoverflow.com/questions/19488364/how-to-properly-use-while-loop -in-pdo-fetchall 但是使用'fetchAll'你根本不需要使用,你只需要將它全部放在一個關聯數組中,但是IMO可以完成相同的工作,而'fetchAll'則更清晰你實際上在做什麼 –

+0

嘗試但仍然沒有工作foreach沒有運行:( –