PHP Mysql正确地迭代具有别名的表

PHP Mysql正确地迭代具有别名的表,php,mysql,Php,Mysql,我有以下Mysql查询: $sql = "select r.brand AS brand, r.name AS name, r.cost AS cost, e.price AS price, d.shipping as shipping FROM tab.rawproduct r INNER JOIN price e ON r.housecode=e.housecode INNER JOIN product d ON e.productid=d.productid WHERE r.ho

我有以下Mysql查询:

$sql = "select r.brand AS brand, r.name AS name, r.cost AS cost, e.price AS price, d.shipping as shipping 
FROM tab.rawproduct r 
INNER JOIN price e ON r.housecode=e.housecode 
INNER JOIN product d ON e.productid=d.productid  
WHERE r.housecode='$housecode'";
将houscode分配给一个变量,然后将该变量传递给sql语句:

<label>Housecode:</label><input class="boxes" type="text" name="housecode" value="<?php echo $housecode; ?>"><br />        

$housecode = $_POST['housecode'];
当用户提交房屋代码并回显0结果时,不会返回任何内容

我已经研究了这个问题并阅读了:

如果结果的两列或多列具有相同的字段名,则 最后一列将优先。要访问 如果名称相同,则必须使用列的数字索引或 列的别名。对于别名列,您无法访问 具有原始列名的内容。因此,您可以使用AS 在SQL查询中,为双倍行设置其他名称,或使用 对索引进行编号以访问它们

所以我在上面的查询中使用了AS关键字,但仍然没有得到任何结果。我还尝试更改为mysqli_fetch_row$result,并尝试分配$row[0]。。。等等。又没运气了

当我运行Apache错误日志时,我得到以下信息:

$result = $con->query($sql);

if ($result->num_rows >0) {
while($row = mysqli_fetch_array($result))  { 
    $brand = $row['brand'];     
    $housecode  = $row['housecode'];
    $name = $row['name'];
    $cost = $row['cost'];
    $salesprice = $row['price'];
    $shipraw = $row['shipping'];
    }
} else {
echo "0 Results";
}

$con->close();
试图在第34行获取非对象的属性。在第34行和第35行,我有:

if ($result->num_rows >0) {
while($row = mysqli_fetch_array($result))  { 
任何帮助都将不胜感激


干杯

我复制了您的示例,在select查询中发现了一个错误:您缺少r.housecode

检查表中的交叉引用是否匹配,因为在我的示例中,行是正确返回的

表格价格:

表产品:

表1产品:


我已经为自己找到了答案

问题是我只选择了一个数据库,即tab.rawproduct,但表price e和ProcProduct d来自一个完全不同的数据库

因此,sql查询应该是这样的:

$sql = "SELECT r.brand, r.name, r.cost, e.price, d.shipping FROM 
tab.rawproduct r
INNER JOIN t1.price e on r.housecode=e.housecode
INNER JOIN t1.product d on e.productid=d.productid 
WHERE r.housecode = '$housecode' ";
如果通过检查mysqli->errno发现错误:

if(!$result = $mysqli->query($sql)) {
 echo "Error: Our query failed to execute and here is why: \n";
 echo "Query: " . $sql . "\n";
 echo "Errno: " . $mysqli->errno . "\n";
 echo "Error: " . $mysqli->error . "\n";
 exit;
}
希望这能帮助其他面临同样问题的人


感谢您的评论和帮助。

$housecode的值是多少?它是否存在于数据库中?请参阅关于准备好的语句您正在对所有列使用别名,这样就不会有问题了。但是,您没有在结果中传回房屋代码,因此$code=$row['housecode'];例如,Housecode是一个字符串HT0008。表单之所以有效,是因为当我在命令行中运行查询时,数据被成功返回。我更新了问题并添加了更多的信息,这些信息已经在评论中详细阐述过了,而且它不是问题的根源。这很好笑,因为遵守所有规则、寻求帮助而被否决,清楚地定义问题并展示您的尝试。你也被鼓励做你自己的研究,这是很明显的,并强调了一个问题,其他人可能会发现有帮助。我只是喜欢有些人如此匿名,毫无帮助,缺乏激励,没有提出建设性的观点。棒 极 了
shipping  productid
64        4
78        5
brand     name     cost   housecode
Cani      bellaaa  63824  HT0008
$sql = "SELECT r.brand, r.name, r.cost, e.price, d.shipping FROM 
tab.rawproduct r
INNER JOIN t1.price e on r.housecode=e.housecode
INNER JOIN t1.product d on e.productid=d.productid 
WHERE r.housecode = '$housecode' ";
if(!$result = $mysqli->query($sql)) {
 echo "Error: Our query failed to execute and here is why: \n";
 echo "Query: " . $sql . "\n";
 echo "Errno: " . $mysqli->errno . "\n";
 echo "Error: " . $mysqli->error . "\n";
 exit;
}