您好,并提前感谢您的时间。
我希望使用PHP中的预准备语句从mysql数据库填充下拉菜单。我只是在寻找具有匹配" client_id"的任何条目。我已经看到这个问题涉及很多方面(其中一些已经过时,其中一些已经过时很复杂)但是却无法找到一个以类似于我一直使用的方式使用php的示例(见下文),以便我可以凑齐一些有效的东西。
以下是我想要使用的代码。
<?php
include ('connect.php');
if ($_POST) {
if (!empty($_POST['client_id'])) {
$client_id = htmlspecialchars($_POST['client_id']);
$stmt = $link->prepare("SELECT project_id, nickname FROM project WHERE client_id=?");
$stmt->bind_param('s', $client_id);
$stmt->execute();
$row = $stmt->fetch();
while ($stmt->fetch()) {
echo ("<option value='$row['project_id']'>$row['nickname']</option>");
}
$stmt->close();
}
}
include ('disconnect.php');
?>
我知道回声部分不正确,但我希望能够展示我至少想到的东西。一般来说,我不是100%我也正确使用行变量。我很感激这里的任何帮助。
编辑:
以上文件名为&#34; fetchProjects.php&#34;
这是包含此PHP文件的代码。
<div class="twelve columns">
<p>select an existing project below</p>
<select size="10" name="selectedProject">
<?php include('fetchProjects.php')?>
</select>
</div>
答案 0 :(得分:3)
您忘记在此处指定您的提取:
while ($stmt->fetch()) {...
应该是:
while ($row = $stmt->fetch()) {...
现在,您尝试使用$row
访问的数组元素将起作用。您应该删除第一次获取,因为这将消耗第一行数据。还有一件事:你不需要括号echo
。
答案 1 :(得分:2)
您可以在while循环$ project_id的每次迭代中使用bind_result,并使用当前数据库行值更新$ nickname
$stmt = $link->prepare("SELECT project_id, nickname FROM project WHERE client_id=?");
$stmt->bind_param('s', $client_id);
$stmt->bind_result($project_id, $nickname);
$stmt->execute();
$stmt->store_result();
while ($stmt->fetch()) {
echo '<option value="'.$project_id.'">'.$nickname.'</option>';
}
$stmt->close();
未经测试但应该可以正常使用
答案 2 :(得分:1)
请查看:
http://php.net/manual/en/mysqli-result.fetch-assoc.php http://php.net/manual/en/mysqli-stmt.fetch.php
会建议:
<?php
include ('connect.php');
if (isset($_POST['client_id'])) {
if (!empty($_POST['client_id'])) {
$client_id = htmlspecialchars($_POST['client_id']);
$stmt = $link->prepare("SELECT project_id, nickname FROM project WHERE client_id=?");
$stmt->bind_param('s', $client_id);
$stmt->execute();
$stmt->bind_result($pid, $nick);
while ($stmt->fetch()) {
echo ("<option value='$pid'>$nick</option>");
}
$stmt->close();
}
}
include ('disconnect.php');
?>