-1

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

$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);

我怎样才能解决这个问题?

编辑:

对于那些询问我所说的中断是什么意思的人,这里有一张图片。

在此处输入图像描述

来自日志的错误。

PHP Parse 错误:语法错误,第 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);
?>
4

2 回答 2

4

在调用第二个查询之前尝试调用 $result->close() 以释放连接。您的 PHP 脚本尚未完成执行,而您之前的结果是保持该连接处于打开状态。一般来说,明确清理这些类型的资源而不是将其留给运行时是一种很好的做法。

编辑:我相信@eis 是正确的,因为这是较旧的(顺便说一下已弃用)mysql_ api,因此正确的调用实际上是 mysql_free_result($result)。

另一个编辑: 我将此评论放在@eis 的答案下,但我认为它的类型更大胆,因为@eis 的答案是绝对正确的,不应该被否决:

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

于 2013-04-17T22:17:53.340 回答
3

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

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

(如果您实际上不需要实际项目,我看不出进行查询的意义。如果您对实际项目不感兴趣,请使用 SELECT COUNT(*) ,并且只是计数。)

于 2013-04-17T22:09:26.920 回答