1

我有两张桌子,化学品和消耗品。“化学品”存储有关化学品的所有一般信息(配方、安全性等),“消耗品”存储有关各个房间的库存和位置等信息。常见字段是“CAS”(化学文摘服务注册号 - 组合数字和连字符)。

我想搜索“化学品”表并从两个表中返回信息

问题 #1 - 我应该将它们加入数据库 (Navicat) 还是仅通过 php 查询?

问题 #2 - 为什么以下代码不起作用?

$item = $_POST['item'];

$chem = mysql_query("
SELECT * 
FROM Chemicals
INNER JOIN Consumables 
ON Chemicals.Name_Chem1 = '%$item%'");

while ($row = mysql_fetch_array($chem)){

echo
"<table border='0'>
<tr class='content'>
<th>Name</th>
<th>Quantity</th>
<th>GHS Code</th>
<th>Formula</th>
<th>CAS</th>

</tr>";

while($row = mysql_fetch_array($chem))
{

 echo "<tr>";

echo "<td class='content'>" . $row['Consumables.Name'] . "</td>";
echo "<td class='content'>" . $row['Consumables.Quantity'] . "</td>";
echo "<td class='content'>" . $row['Chemicals.GHS_1'] . "</td>";
echo "<td class='content'>" . $row['Chemicals.Formula'] . "</td>";
echo "<td class='content'>" . $row['CAS'] . "</td>";
echo "</tr>";
}
echo "</table>";
}
4

1 回答 1

1

A1.) 加入他们MySQL

A2.) 由于您提到它们的公共列称为,因此您应该在子句中CAS定义它们,例如。ON

SELECT  a.*, b.*
FROM    Chemicals a
        INNER JOIN Consumables b
            ON a.CAS = b.CAS
WHERE   a.Name_Chem1 = '%$item%'

作为旁注,SQL Injection如果值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用 PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-01-13T14:03:52.657 回答