它无法从WHERE子句中的变量中检索正确的值

时间:2012-12-01 04:42:30

标签: php mysqli

下面我hava查询在哪里执行查询以从数据库中查找所有课程详细信息并在下拉菜单中显示,然后使用$outputcourse变量在消息中显示所选课程:

    $sql = "SELECT CourseId, CourseNo, CourseName FROM Course ORDER BY CourseNo"; 

    $sqlstmt=$mysqli->prepare($sql);

    $sqlstmt->execute(); 

    $sqlstmt->bind_result($dbCourseId, $dbCourseNo, $dbCourseName);

    $courses = array(); // easier if you don't use generic names for data 

    $courseHTML = "";  
    $courseHTML .= '<select name="courses" id="coursesDrop">'.PHP_EOL; 
    $courseHTML .= '<option value="">Please Select</option>'.PHP_EOL;  

    $outputcourse = ""; 
    $hiddencourse = ""; 

    while($sqlstmt->fetch()) 
    { 
    $course = $dbCourseId;
    $courseno = $dbCourseNo;
    $coursename = $dbCourseName; 
    $courseHTML .= "<option value='".$course."'>" . $courseno . " - " . $coursename . "</option>".PHP_EOL;  

    if (isset($_POST['courses']) && ($_POST['courses'] == $course)) {
    $outputcourse .= "<p><strong>Course:</strong> " . $courseno .  " - "  . $coursename . "</p>";
    $hiddencourse .= "<p><input type='hidden' id='hiddencourse' value='". $courseno . " - " . $coursename ."'></p>";
}

    } 

    $courseHTML .= '</select>';  

现在我要做的是显示不属于所选课程的模块。现在我的查询在php中运行正常,但我遇到的问题是,如果我使用mysqli运行此查询,则无法在where子句中退出$dbCourseId变量,因此WHERE子句不正确。

WHERE子句假设显示courseId,它被认为是1,但它一直显示10。如果我选择其中courseId应为3的其他课程,则仍会输出10

那么我的问题是哪个变量应该放在下面代码中的bind-&gt; param()中,以及如何退出所选课程的正确courseId?

以下是查询的代码:

$modulequery = "
SELECT
m.ModuleId, m.ModuleNo, m.ModuleName, m.Credits
FROM
Module m
WHERE
m.ModuleId NOT IN (
SELECT cm.ModuleId
FROM Course_Module cm
WHERE cm.CourseId = ?
)
ORDER BY m.ModuleNo
";

$moduleqrystmt=$mysqli->prepare($modulequery);
// You only need to call bind_param once
$moduleqrystmt->bind_param("i",$dbCourseId);
// get result and assign variables (prefix with db)

$moduleqrystmt->execute(); 

$moduleqrystmt->bind_result($dbModuleId,$dbModuleNo,$dbModuleName,$dbCredits);

$moduleqrystmt->store_result();

$modulenum = $moduleqrystmt->num_rows();     

echo $dbCourseId;

1 个答案:

答案 0 :(得分:1)

在if语句下方,您检查用户是否点击了courseSubmit按钮,其中包含以下行:

if (isset($_POST['courseSubmit'])) {    

        //get the form data 
    $coursesdrop = (isset($_POST['courses'])) ? $_POST['courses'] : ''; 

现在,由于每个“课程”选项都包含$dbCourseId的值,因此您可以使用$coursesdrop变量以便在其他查询中停用课程ID。

所以在其他查​​询中更改:

$moduleqrystmt->bind_param("i",$dbCourseId);

要:

$moduleqrystmt->bind_param("i",$coursesdrop);

解决问题