下面是我的代码:
$result = $mysqli->query('SELECT * FROM products');
if($result === FALSE){
die(mysql_error());
}
if($result){
while($obj = $result->fetch_object()) {
if ($obj->typeOf === 'single')
{
$forPack = $mysqli->query('SELECT id FROM products WHERE typeOf = 12-pack AND product_name = '.$obj->product_name);
$forPound = $mysqli->query('SELECT id FROM products WHERE typeOf = 50-pound AND product_name = '.$obj->product_name);
echo '<div class="large-3 columns">';
echo '<p><h3>'.$obj->product_name.'</h3></p>';
echo '<img src="images/products/'.$obj->product_img_name.'"/>';
echo '<p><strong>Price (Per Unit)</strong>: '.$currency.$obj->price.'</p>';
echo '<p><a href="update-cart.php?action=add&id='.$obj->id.'"><input type="submit" value="Add Single" style="clear:both; background: #0078A0; border: none; color: #fff; font-size: 1em; padding: 10px;" /></a></p>';
echo '<p><a href="update-cart.php?action=add&id='.$forPack.'"><input type="submit" value="Add 12-pack" style="clear:both; background: #0078A0; border: none; color: #fff; font-size: 1em; padding: 10px;" /></a></p>';
echo '<p><a href="update-cart.php?action=add&id='.$forPound.'"><input type="submit" value="Add 50 pound" style="clear:both; background: #0078A0; border: none; color: #fff; font-size: 1em; padding: 10px;" /></a></p>';
echo '</div>';
}
}
我遇到麻烦的区域是$forPack和$forPound。在我的产品表中,一般有三种产品。该产品,12包产品,50磅产品。三个update-cart.php调用中的第一个调用一切正常。上面写着$obj->id,但我似乎无法使用$forPack或$forPound。它们有完全相同的产品名称,只是服务器上的"typeOf"不同。当我查询选择ID时,它不只是返回一个数字吗?这里到底还了什么?
我只需要程序在产品表中查找具有相同确切名称但不同类型的产品。如果有更好的方法,请告诉我。我是SQL和PHP的初学者,所以我确信这是一个愚蠢的错误。
这里有两件不同的事情:
- 打字(不包括需要的引号)
-
您的结果集当前是一个数组,而不是单个值。试试这个:
$forPack = $mysqli->query("SELECT id FROM products WHERE typeOf = '12-pack' AND product_name = '" . $obj->product_name . "'")->fetch_row()[0];
$forPound = $mysqli->query("SELECT id FROM products WHERE typeOf = '50-pound' AND product_name = '" . $obj->product_name . "'")->fetch_row()[0];
不确定网站拒绝使用代码块的原因。无论如何,请注意,您的SQL现在对整个语句使用双引号,因此您可以在其中使用单引号。此外,单引号围绕着typeOf
值和$obj->product_name
。在构建SQL字符串时,最好先回显它们,这样您就可以看到它们是正确构建的。要做到这一点,我会做一些类似的事情:
$sql = "SELECT id FROM products WHERE typeOf = '12-pack' AND product_name = '" . $obj->product_name . "'";
echo $sql;
$forPack = $mysqli->query($sql)->fetch_row()[0];