MySQL データベースの PHP フロントエンドを作成しています。RegionID (int)、Name (文字列)、および Country (文字列) を含む "Regions" というテーブルがあります。<optgroup> を使用して国ごとに地域をグループ化して、すべての地域をオプションとして含むフォームに <select> リストを配置しようとしています。私はネストされた単純なクエリによってすでに成功しており、今は準備されたステートメントについて頭を悩ませようとしています。
私がこれまでに持っているものは次のとおりです。
// $DB is database object, already connected
// Error checking will be worked into this once I've worked out the basics...
$stmt_country = $DB->stmt_init();
$stmt_country->prepare("SELECT DISTINCT Country FROM Regions ORDER BY Country ASC");
$stmt_country->execute();
$stmt_country->bind_result($CountryName);
$stmt_region = $DB->stmt_init();
$stmt_region->prepare("SELECT RegionID,Name FROM REGIONS WHERE Country=? ORDER BY Name ASC");
$stmt_region->bind_param("s",$CountryName);
echo "<select name=\"RegionID\">\n";
while ($stmt_country->fetch()) {
// Start 'country' option group
echo "<optgroup label=\"$CountryName\">\n";
// Execute the 'regions' query using the 'country' parameter
$stmt_region->execute();
$stmt_region->bind_result($RegionID,$RegionName);
while ($stmt_region->fetch()) {
// Output the regions matching that country
echo "<option value=\"$RegionID\">$RegionName</option>\n";
}
echo "</optgroup>\n";
}
echo "</select>\n";
ただし、これを実行すると、次のようになります。
Warning: mysqli_stmt::bind_param(): invalid object or resource
ライン上$stmt_region->bind_param("s",$CountryName)
。
コードからコメントアウトすると、$stmt_country
半分だけが機能し (つまり、各国の optgroup のみを出力します)、 の値を差し込むと$CountryName
、$stmt_region
半分は単独で機能しますが、取得できません。両方の半分が一緒に働いています。誰かが私がどこで間違っているのか教えてもらえますか?