Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL/php-存储过程-一个过程会让我的其余代码出错!_Php_Mysql - Fatal编程技术网

SQL/php-存储过程-一个过程会让我的其余代码出错!

SQL/php-存储过程-一个过程会让我的其余代码出错!,php,mysql,Php,Mysql,SQL版本-5.0.77 使用PHPMyAdmin 存储过程代码: CREATE PROCEDURE checkStudent (IN email VARCHAR(50)) BEGIN SELECT email, name, gender, dob, status FROM studentCOMP WHERE studentCOMP.email = email; END$$ PHP代码: //$exist = mysql_query("SELECT * FROM studentCOMP WH

SQL版本-5.0.77 使用PHPMyAdmin

存储过程代码:

CREATE PROCEDURE checkStudent (IN email VARCHAR(50))
BEGIN
SELECT email, name, gender, dob, status
FROM studentCOMP
WHERE studentCOMP.email = email;

END$$
PHP代码:

//$exist = mysql_query("SELECT * FROM studentCOMP WHERE (email ='$email')");
$exist = mysql_query("CALL checkStudent('$email')");
$rowresult = mysql_num_rows($exist);    

if($rowresult == 0)  //if 0 results are returned from the earlier query
{
    echo "Please enter a valid email address- Student does not exist";
} 
else
{
    $exams = mysql_query("
        SELECT StudentExamLink.examID, examCOMP.date, examCOMP.medallevel, examCOMP.mark, examCOMP.dancestyle 
        FROM StudentExamLink 
            INNER JOIN examCOMP 
                ON StudentExamLink.examID=examCOMP.examID 
        WHERE (StudentExamLink.email ='$email')
    ");
    $rowresult2 = mysql_num_rows($exams);
    echo "$rowresult2 number of rows";
}

if ($rowresult2 == 0)
{
    echo "no exams taken";
}
嗨,我想知道是否有人能帮我解决这个问题。当我用

$exist = mysql_query("SELECT * FROM studentCOMP WHERE (email ='$email')");
替换存储过程一切正常。但是当我在存储过程中替换时,它会导致代码片段

$exams = mysql_query("
    SELECT StudentExamLink.examID, examCOMP.date, examCOMP.medallevel, examCOMP.mark, examCOMP.dancestyle 
    FROM StudentExamLink 
        INNER JOIN examCOMP 
            ON StudentExamLink.examID=examCOMP.examID WHERE (StudentExamLink.email ='$email')
");
不返回任何行,即使它应该返回一些。存储过程是锁定表还是什么?我不知道如何修复它,当我在其他页面上这样做时,它也会打乱后续的查询


提前感谢

我从未对返回结果集的存储过程有过太多的喜爱

最好在存储过程中创建一个临时表,并在php代码中从中进行选择

CREATE PROCEDURE checkStudent (IN email VARCHAR(50))
BEGIN
CREATE TEMPORARY temptable 
SELECT email, name, gender, dob, status
FROM studentCOMP
WHERE studentCOMP.email = email;

END$$
然后

$query = "SELECT * FROM temptable";
$exams = mysql_query($query);  

谢谢,我明天就试一试。因此,我必须在您给出的$query之前调用checkStudent过程?这样做现在会返回0个结果……我稍后会再次尝试,但现在这并不重要,我可以使用键入的查询,但谢谢一些错误检查可能有助于了解发生了什么。如果添加
if(!$tests)echo mysql_error(),是否会打印错误在那一秒之后
mysql\u query()
?如果您对第一个进行类似的操作会怎么样?
mysql\u查询(“callcheckstudent(“$email”)用这句话,你正在向一个受伤的世界敞开心扉。这个查询是向SQL injection.Matt打开的——当我把它放在第一个mysql查询之后,我得到了“不同步的命令”;你现在不能运行这个命令,在第二次之后,我没有得到任何额外的信息