我正在为 MySQL 数据库制作 PHP 前端。我有一个名为“Regions”的表,其中包含 RegionID (int)、Name (string) 和 Country (string)。我正在尝试将 <select> 列表放入包含所有区域作为选项的表单上,使用 <optgroup> 来按国家/地区对区域进行分组。我已经通过嵌套的普通查询成功地完成了它,现在我正试图了解准备好的语句。
到目前为止,我得到的是:
// $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
一半的工作(即只输出每个国家的 optgroups),然后以 的值为$CountryName
,它的$stmt_region
一半自己工作,但我无法得到两半一起工作。有人可以告诉我哪里出错了吗?