Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
PHP使用第二个mysql\u查询中断_Php_Mysql_Sql - Fatal编程技术网

PHP使用第二个mysql\u查询中断

PHP使用第二个mysql\u查询中断,php,mysql,sql,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

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

$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解析错误:语法错误,第30行/Users/philipkirkbride/Documents/apps/Today\u 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);
?>

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

您有两个不同的查询。如果您不读取结果或在中间关闭它,它可能不允许您运行新的结果

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

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

EDIT:我认为@eis是正确的,因为这是较旧的(顺便提一下,是不推荐的)mysql\uAPI,正确的调用实际上应该是mysql\u free\u result($result)

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


只是对整个缓冲与非缓冲的事物进行了冗余的阐述;其概念是,一个缓冲的查询将把所有结果从数据库读回缓冲区,然后自动释放连接(这将同步发生,以便在缓冲的调用返回后,连接可以立即用于另一个调用)。一个无缓冲的查询基本上会打开连接并返回对数据库服务器游标的引用,然后需要从中获取记录。只要还有东西要提取,游标就仍然打开,您将不会使用底层连接进行任何其他操作。或者您可以调用mysql\u free\u result()并“早”释放连接(不必首先读取光标上的所有行)。

您能给我们提供比“中断”更多的信息吗?您希望发生什么?到底发生了什么?你们尝试过什么来修复它?那个尝试在哪里失败了?和答案无关,只是为了提倡良好的行为
mysql
已被弃用。请使用
mysqli
。如果您正在编写新代码,那么值得一提的是,PHP已经弃用了
mysql\u xxx()
函数。对于新代码,您应该使用PDO库。(如果现有代码已经使用了
mysql_xx()
然后继续,但你需要计划转换它,因为PHP的未来版本将放弃旧的mysql扩展…你的意思是除了它不起作用之外,对吗?我很想得到关于-1的反馈,这不是我的投票,但你实际上没有回答这个问题。我是。问题是“我应该如何解决这个问题?”。这将通过读取查询之间的结果来解决。mysql\uAPI不允许在不读取查询之间的结果的情况下运行两个不同的查询…但是好的,如果这些结果是无缓冲的,mysql\u num\u行也不会工作…所以我猜我错了。因为这是传统的mysql\uAPI,我确实认为您需要使用mysql\u free\u result($result)我没有像我建议的那样($result->close()),我很惊讶你被否决了。我可能会补充说,我在其他地方读到过,Oracle内部的人并没有真正使用PDO,他们也不是都很热衷于维护PDO,所以+1推荐mysqli。真的是被否决了吗?我猜之前的“mysql_query()返回一个对象…真的吗?“注释消失了。我不确定人们期望它返回什么;狮子狗?根据文档,它返回一个资源,或者是false。“资源”(ahem)就是其中一个对象,看看资源是如何定义为对外部内容的引用的,“外部内容”仅在特定资源类型的上下文中专门定义。关于需要调用mysql\u free\u result($result)而不是->close(),您可能是对的。在mysql\u存在时,PHP中没有对象。它是mysqli\uu的一部分。对于mysqli\uu结果,您可以调用->close()。