尝试在我们的数据库中搜索项目,这是代码。
$SQL = $yhteys->prepare("SELECT *, COUNT(*) AS Maara FROM TuoteTiedot
INNER JOIN VarastoTuoteLista ON TuoteTiedot.TuoteID=VarastoTuoteLista.TuoteID
INNER JOIN Varastopaikat ON VarastoTuoteLista.PaikkaID=Varastopaikat.PaikkaID
WHERE '?' LIKE '?' OR '?' LIKE '?'");
$SQL->execute(array($hakuvalinta1, $haku1, $hakuvalinta2, $haku2));
$tiedot = $SQL->fetchAll();
if($SQL->execute(array($haku1, $hakuvalinta1, $haku2, $hakuvalinta2))){
if($SQL->fetchColumn() > 0){
$SQL2 = $yhteys->prepare("SELECT * FROM TuoteTiedot
INNER JOIN VarastoTuoteLista ON TuoteTiedot.TuoteID=VarastoTuoteLista.TuoteID
INNER JOIN Varastopaikat ON VarastoTuoteLista.PaikkaID=Varastopaikat.PaikkaID
WHERE '?' LIKE '?' OR '?' LIKE '?'");
$SQL2->execute(array($haku1, $hakuvalinta1, $haku2, $hakuvalinta2));
$SQL2->fetchAll();
foreach($yhteys->execute() as $row){ //this is line 55
echo $row['Nimi'] + " ";
echo $row['TuoteSeloste'] + " " ;
echo $row['Myyntihinta'];
}
}
echo "</table>";
} else {
echo 'Nothing found';
}
它在页面上给出一个错误,如下所示:
致命错误:调用未定义的方法 PDO::execute() in (已删除) 地址)索引.php在第 55 行
我不知道它有什么问题,但显然 foreach 不喜欢 PDO 或类似的东西。PDO有点新,但是在网站上工作的其他人想使用它,所以我也必须使用它。
我已经检查了查询是否有效,并且以前的执行工作正常。
$yhteys->execute
我们不execute
PDO对象,我们只执行预准备语句。 $yhteys
是 PDO
类型的对象,您正确地在该对象的其他地方使用了预准备语句,但在 foreach 循环中,您直接尝试在该非常PDO
的对象上调用 execute
,因此会出现错误。
很可能你的意思是这个
foreach($SQL2 as $row){
您正在尝试用参数替换列名,在这里
WHERE '?' LIKE '?' OR '?' LIKE '?'
^ ^
表名和列名不能替换为参数。
似乎没有人涵盖所有问题,所以我会尝试这样做。
首先:不能在查询中使用除数据以外的任何参数,不能使用表名或列名等。
如果你考虑一下,这是非常合乎逻辑的。在将参数替换为数据之前,向数据库发出查询以进行编译、优化和创建执行计划。因此,如果数据库不知道查询中涉及的表名和列名,则无法编译查询。
您也不需要'?'
简单的?
就足够
所以这个查询不会->prepare
$SQL2 = $yhteys->prepare("SELECT * FROM TuoteTiedot
INNER JOIN VarastoTuoteLista ON
TuoteTiedot.TuoteID=VarastoTuoteLista.TuoteID
INNER JOIN Varastopaikat ON
VarastoTuoteLista.PaikkaID=Varastopaikat.PaikkaID
WHERE '?' LIKE '?' OR '?' LIKE '?'");
您必须使用真实的列名,我不知道您的列名是什么,所以这只是一个例子
$SQL2 = $yhteys->prepare("SELECT * FROM TuoteTiedot
INNER JOIN VarastoTuoteLista ON
TuoteTiedot.TuoteID=VarastoTuoteLista.TuoteID
INNER JOIN Varastopaikat ON
VarastoTuoteLista.PaikkaID=Varastopaikat.PaikkaID
WHERE COLUMN1 LIKE ? OR COLUMN2 LIKE ?");
现在我们来找你的->fetchAll()
.->fetchAll
返回一个数组,其中包含结果集中的所有行,因此您需要将该数据放入变量中,并在该数组上循环
此外,如果您使用参数PDO::FETCH_ASSOC
,您将只得到一个 assoc 数组,默认值是一个 assoc 数组和一个基于 0 的索引。换句话说,返回的数组将是大小的两倍。这在大型查询中可能很重要。
所以使用
$rows = $SQL2->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
echo $row['Nimi'] . " ";
echo $row['TuoteSeloste'] . " " ;
echo $row['Myyntihinta'];
}
foreach 循环打印所有数据,而不是这样使用:
$SQL2->execute(array($haku1, $hakuvalinta1, $haku2, $hakuvalinta2));
$data = $SQL2->fetchAll();
foreach($data as $row){ //this is line 55
echo $row['Nimi']." ";
echo $row['TuoteSeloste']." " ;
echo $row['Myyntihinta'];
}