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";
我搜索有关该错误的,我理解,但我试过许多决议并没有解决这个问题。
有人可以帮忙吗?
进入$idResturant
通过检查它你应该做类似下面的
$stmt->execute();
$stmt->bind_result($idRestaurant);
$stmt->fetch();
尝试为PDO:
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$idRestaurant = $result['idRestaurant'];
检查:
$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;
我该怎么做? –
检查更新后的答案 –
的问题是在此声明
$idRestaurant = $stmt->fetch();
你试过$idRestaurant = $stmt->fetch()[0];
?
实际上,你可以检查什么的VIA var_dump
var_dump($idResturant)
'$ stmt-> fetch()[0]'只有存在'true [0]'时才存在 – bansi
它给了我一个:未定义的偏移量:0。 –
做这个'$ idRestaurant = $ stmt-> fetch(); var_dump($ idRestaurant);'检查结果 – progrAmmar
'的var_dump( $ idRestaurant);'?如果问题确实存在于“SELECT评分FROM Review WHERE Review.idRestaurant = $ idRestaurant”字符串中,那么$ idRestaurant是一个数组。但'mysqli_stmt_fetch'返回'bool'。您应该绑定结果变量。 –
怎么了解除引用的答案?首先教导OP如何正确使用预处理语句,不要直接将变量插入到查询语句中,在语句中使用占位符并使用简单的' - > bindValue'方法绑定变量。如果你只是将它们直接用于字符串,就像使用撬棒敲钉子一样,准备好语句的用途是什么 – Ghost
为什么在这个线程中的每个答案都被低估了? – Ronald