运行包含两个查询的程序。当我单独运行任一查询时,它可以工作,但当代码中存在两个查询时它就会中断。
$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_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);
?>
答案 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(*),并且几乎就是计数。)