2016-12-16 102 views
-1

所以我做了一個查詢返回許多餐館,我把它們放在一個變量$行:PHP數組到字符串轉換

<?php if(count($Result_restaurants)>0) 
{ 
    foreach($Result_restaurants as $row) 
    { ?> 
     <div id="ForEveryRestaurant"> 
     <?php 
     $Rest_Name = $row['name']; 
     //$Rest_Name = $row; 
     $stmt = $db->prepare("SELECT Restaurant.idRestaurant FROM Restaurant WHERE Restaurant.name = \"$Rest_Name\""); 
     $stmt->execute(); 
     $idRestaurant = $stmt->fetch(); 

     $avg = 0; 
     $rateSum = 0; 
     $strcard = "SELECT rating FROM Review WHERE Review.idRestaurant = $idRestaurant"; 
     $stmtcard = $db->prepare($strcard); 
     $stmtcard->execute(); 
     $result = $stmtcard->fetchAll(); 
     if (count($result) === 0) 
     { 
     return 0; 
     } 
     foreach($result as $coments) 
     { 
     $rateSum += $coments['rating']; 
     } 
     $avg = $rateSum/count($result); 
     $avg = round($avg, 1); 

當我嘗試運行我的代碼,它打印數組到字符串轉換。

的問題出現在這行:

$strcard = "SELECT rating FROM Review WHERE Review.idRestaurant = $idRestaurant"; 

我搜索有關該錯誤的,我理解,但我試過許多決議並沒有解決這個問題。

有人可以幫忙嗎?

+1

'的var_dump( $ idRestaurant);'?如果問題確實存在於「SELECT評分FROM Review WHERE Review.idRestaurant = $ idRestaurant」字符串中,那麼$ idRestaurant是一個數組。但'mysqli_stmt_fetch'返回'bool'。您應該綁定結果變量。 –

+1

怎麼了解除引用的答案?首先教導OP如何正確使用預處理語句,不要直接將變量插入到查詢語句中,在語句中使用佔位符並使用簡單的' - > bindValue'方法綁定變量。如果你只是將它們直接用於字符串,就像使用撬棒敲釘子一樣,準備好語句的用途是什麼 – Ghost

+0

爲什麼在這個線程中的每個答案都被低估了? – Ronald

回答

0

進入$idResturant通過檢查它你應該做類似下面的

$stmt->execute(); 
$stmt->bind_result($idRestaurant); 
$stmt->fetch(); 

嘗試爲PDO:

$result = $stmt->fetch(PDO::FETCH_ASSOC); 
$idRestaurant = $result['idRestaurant']; 
+0

好的,所以我做了,它告訴我,我有」未定義綁定結果的方法「......這不會讓人感到驚訝。 –

+0

fyi:OP正在使用PDO接口 – Ghost

+0

@Ghost這是新聞。看起來像一個如何問一個壞問題的例子 – bansi

0

檢查:

$idRestaurant = $stmt->fetch(); 
// Its an array and you cannot use an array directly with WHERE clause in a query. Convert it to normal variable and use it. 

$strcard = "SELECT rating FROM Review WHERE Review.idRestaurant = $idRestaurant";  
// here you are using the array in WHERE clause 

要做到這一點:

$rating = isset($stmt->fetch()[0]) ? $stmt->fetch()[0]: null; 
+0

我該怎麼做? –

+0

檢查更新後的答案 –

0

的問題是在此聲明

$idRestaurant = $stmt->fetch(); 

你試過$idRestaurant = $stmt->fetch()[0];

實際上,你可以檢查什麼的VIA var_dump

var_dump($idResturant) 
+0

'$ stmt-> fetch()[0]'只有存在'true [0]'時才存在 – bansi

+0

它給了我一個:未定義的偏移量:0。 –

+0

做這個'$ idRestaurant = $ stmt-> fetch(); var_dump($ idRestaurant);'檢查結果 – progrAmmar