PHP Mysql正确地迭代具有别名的表
我有以下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
$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;
}