我最近开始学习Prepared Statements并开始使用新样式配置我的脚本。
然而,我碰到了一堵小墙,我希望有人可以指出我正确的方向?
这是我的SQL查询结构:
$query = "SELECT `results`, `Success`, `Failure`, `Counter`, `Grades`, `Classes`,
`Special_Id`, `SpecialCondition` FROM `Courses` INNER JOIN `Students` ON `id` =
`Students_Id` JOIN `Conditions` ON `id` = `Special_Id`";
$stmt = $Mconn->prepare($query);
$stmt->bind_result($results, $success, $failed, $counter, $grades, $classes,
$specialId, $specialcondition);
$stmt->execute();
$stmt->store_result();
这是一个代码块:
<?php
echo "<select = \"SpecialConditions\">";
if($stmt->num_rows == NULL){
echo "No results found.";
}else{
while($stmt->fetch()){
echo "<option value=\"$specialId\">$specialcondition</option>";
}
}
echo "</select>";
?>
另一个代码块:
<?php
echo "<select = \"Grades\">";
if($stmt->num_rows == NULL){
echo "No results found.";
}else{
while($stmt->fetch()){
echo "<option value=\"".$grades."\">".$grades."</option>";
}
}
echo "</select>";
?>
好的,现在发生的事情是,如果我将这两个查询都放在同一页面上,第一个块会杀死第二个块,另一个查询将在它下面,我无法找出原因并且我已经研究过这个端。
我已经尝试在相同的代码块中关闭连接,认为这可能会成功,但不会占上风。
现在,我知道数据库连接正在运行,我确实知道返回的结果实际上是存储的,因为如果我在一个单独的页面上测试每个块,它就会按照预期的那样工作。
提前感谢您的帮助。
答案 0 :(得分:4)
答案 1 :(得分:1)
很好,我终于开始工作了。一切都需要存储在一个数组中,并通过它看起来提取。至少这是我让它正常工作的唯一方法。
这是最终的解决方案,以防万一有人好奇或将来撞到这堵墙。如果你知道一种不需要这种方法的方法,请告诉我。
我的动态函数连接并查询数据库:
<?php
function DB_Query(){
$databasefields = array();
$results = array();
@$Mconn = new mysqli(DBHOST, DBUSER, DBPWRD, DBNAME);
if (!@mysqli_connect(DBHOST, DBUSER, DBPWRD, DBNAME)){
die(DBERROR);
}
$query = "SELECT `results`, `Success`, `Failure`, `Counter`, `Grades`, `Classes`,
`Special_Id`, `SpecialCondition` FROM `Courses` INNER JOIN `Students` ON `id` =
`Students_Id` JOIN `Conditions` ON `id` = `Special_Id`";
$stmt = $Mconn->prepare($query);
$stmt->execute();
$meta = $stmt->result_metadata();
while($field = $meta->fetch_field()){
$databasefields[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $databasefields);
while($stmt->fetch()){
$queried = array();
foreach($row as $key => $vector){
$queried[$key] = $vector;
}
$results[] = $queried;
}
return $results;
}
$results = DB_Query(); // placed in DB include file
?>
这是我用来实际单独或多个块显示数据的代码。只需更改字段名称即可与您的名称相对应。该函数是动态的,不需要您对任何绑定结果进行硬编码,因此您可以根据需要获取任意数量的字段。
<?php
foreach($results as $row){
echo $row['grades'].'<br />';
}
感谢所有的帮助,我希望这可以帮助那些遇到同样问题的人。