我有两张桌子。我的第一个表ps_product包含id_product,price,unity和reference。我正在尝试加入另一个名为ps_product_lang的表,其中包含一个名为name的列。
我收到以下错误:
Error: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id_product' in field list is ambiguous
我还提供了以下代码:
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id_product, price, unity, reference FROM ps_product JOIN ps_product_lang ON ps_product.id_product WHERE ps_product_lang.id_product = id_product");
$stmt->execute();
$product = $stmt->fetchAll();
echo '<div class="table-responsive">';
echo '<table class="table table-striped">';
echo '<th>Checkbox</th><th>Product ID</th><th>Product Name</th><th>Price</th><th>Unit</th><th>Reference</th>';
foreach ($product as $row) {
print '<tr>';
print '<td><input type="checkbox" name="'. $row["id_product"] .'" value="'. $row["id_product"] .'"></td>';
print '<td>'. $row["id_product"] .'</td>';
print '<td>'. $row["name"] .'</td>';
print '<td>'. $row["price"] .'</td>';
print '<td>'. $row["unity"] .'</td>';
print '<td>'. $row["reference"] .'</td>';
print '</tr>';
}
echo '</table>';
echo '</div>';
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
为什么$ row [&#34; name&#34;]等于什么,为什么我会列出错误?
答案 0 :(得分:2)
你错过了连接查询中的ON子句,并且在应用ON后不需要在哪里。在字段名称id_product之前,ps_product的别名也丢失了。请检查下面的查询。如果这两个表之间的其他字段也很常见,那么也需要别名。
$stmt = $conn->prepare("SELECT ps_product.id_product as id_product,name, price, unity, reference FROM ps_product JOIN ps_product_lang ON ps_product_lang.id_product = ps_product.id_product");
答案 1 :(得分:0)
由于您正在两个表之间进行连接,并且此连接的对象是两个同名的列,因此SQL不知道它应该返回给您哪一列。您可以在表上使用别名来帮助SQL引擎知道他应该在acount中使用哪个:
SELECT PRD.id_product,
price,
unity,
reference
FROM ps_product PRD
JOIN ps_product_lang PRL ON PRD.id_product = PRL.id_product
现在,SQL知道您将选择表id_product
的列ps_product
而不是同名的另一列(ambigous)。