PHP打破第二个mysql_query

时间:2013-04-17 22:04:38

标签: php mysql sql

运行包含两个查询的程序。当我单独运行任一查询时,它可以工作,但当代码中存在两个查询时它就会中断。

$qry = "SELECT * FROM temp_user WHERE email='$email' AND pin='$pin'";
$result = mysql_query($qry);
$num_rows = mysql_num_rows($result);

$qry2 = "SELECT * FROM email WHERE email='$email'";
$result2 = mysql_query($qry2);
$num_rows2 = mysql_num_rows($result2);

我该如何解决这个问题?

编辑:

对于那些询问它是什么意思的人来说,这是一张图片。

enter image description here

日志错误。

PHP解析错误:语法错误,第30行/Users/philipkirkbride/Documents/apps/Today_test/confirm.php中的意外'}'

完整的网页代码是

<?php
include 'connect.php';

$pin = $_GET['pin'];
$email = $_GET['email'];

$qry = "SELECT * FROM temp_user WHERE email='$email' AND pin='$pin'";
$result = mysql_query($qry);
$num_rows = mysql_num_rows($result);
if ($num_rows!=0){
    print "create user and delete temp";
    $sql = "INSERT INTO pin VALUES (DEFAULT, '$pin', '$email')";
    $result = mysqli_query($con,$sql);
    if ( false===$result ) {
      printf("error: %s\n", mysqli_error($con));
    } else {
        // Delete user from temp table
        $sql2 = "DELETE FROM temp_user WHERE email='$email' AND pin='$pin'";
        $delete = mysqli_query($con,$sql2);
        // Make query to see if user is new or existing
        $qry2 = "SELECT * FROM email WHERE email='$email'";
        $result2 = mysql_query($qry2);
        $num_rows2 = mysql_num_rows($result2);
        // Need to add a snippet to add a row to the email table, make sure to check user doesn't have an email already in table
        if($num_rows2==0){
            print "email doesn't exist, create new user."
            // $date = new DateTime;
            // $sql = "INSERT INTO email VALUES ('$email', '$date')";
            // $result = mysqli_query($con,$sql);
        }else{
            print "email exists already";
        }
    }
}else{
    print "Account request not found";
}
// End connection
mysqli_close($con);
?>

2 个答案:

答案 0 :(得分:4)

在调用第二个查询之前尝试调用$ result-&gt; close(),以释放连接。您的PHP脚本尚未完成执行,您之前的结果是打开该连接。通常,最好是明确清理这些类型的资源,而不是将其留给运行时。

编辑:我认为@eis是正确的,因为这是较旧的(并且不赞成使用)mysql_ api,正确的调用实际上是mysql_free_result($ result)。

另一个编辑:我把这个评论放在@ eis的答案下,但我认为它更大胆,因为@ eis的答案是绝对正确的,不应该被拒绝投票:

只是冗余地详细说明整个缓冲与无缓冲的事情; 概念缓冲查询将所有结果从数据库读回缓冲区,然后自动释放连接(这将同步发生,以便连接在缓冲的调用返回后立即进行另一次调用)。 无缓冲查询将基本上打开连接并回送对数据库服务器游标的引用,然后您需要从中获取记录。只要还有一些东西需要提取,光标仍然是打开的,你不会使用任何其他的底层连接。或者你可以调用mysql_free_result()并“提前”释放连接(不先读取光标中的所有行)。

答案 1 :(得分:3)

你实际应该1)读取你检索的结果或2)释放它(mysql_free_result)......

您有两个不同的查询。如果您没有读取结果或在两者之间关闭它,它可能不会让您运行新结果。

(如果你实际上并不需要实际的项目,我没有看到做查询的要点。如果你对实际项目不感兴趣,那么使用SELECT COUNT(*),并且几乎就是计数。)