PHP数组到字符串转换

问题描述:

所以我做了一个查询返回许多餐馆,我把它们放在一个变量$行: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

进入$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

检查:

$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

检查更新后的答案 –

的问题是在此声明

$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