1

Chemicals & Consumables という 2 つのテーブルがあります。「Chemicals」には化学物質に関するすべての一般情報 (式、安全性など) が保存され、「Consumables」にはさまざまな部屋の在庫と場所に関する情報などが保存されます。共通フィールドは「CAS」 (Chemical Abstract Service Registry Number - の組み合わせ) です。数字とハイフン)。

"Chemicals" テーブルを検索して、両方のテーブルから情報を返したい

質問 #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補足として、値が外部から取得された場合クエリは脆弱です。予防方法については、以下の記事をご覧ください。PreparedStatements を使用すると、値を一重引用符で囲む必要がなくなります。

于 2013-01-13T14:03:52.657 に答える