PHP MYSQL警告:mysql_query()期望参数1为字符串,资源在

时间:2011-10-03 22:27:56

标签: php mysql warnings invite

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

<?php
    include 'connect.php';
    include 'header.php';

    $page = "signup.php";
    // receive the invite code:
    $code = $_POST['code'];
    $sql = "SELECT codes FROM invites WHERE codes='$code'";
    // check the table for matching codes
    $result = mysql_query($sql);
    // check if the request returned 1 or 0 rows from the database
    if (mysql_query($result)) {
        // end any previously defined sessions.
        session_start();session_unset();session_destroy();
        // start a new session
        session_start();
        // define the session variable.
        // this allows us to check if it's set later and is required for
        // the script to run properly.
        $code = $_POST["code"];
        mysql_query("DELETE FROM invites WHERE codes='$code'");
        header('Location: '.$page);
        exit;
    } else {
        echo "Invite invalid. Please try again later.";
        echo $code;
    }

    include 'footer.php';
?>

我正在尝试将邀请系统实施到我正在处理的网页上。但是,在尝试评估是否存在包含邀请代码的行时,我保持一无所知或此警告。在这种情况下的警告,但如果我将if状态更改为== 1,它允许每个人不管代码和== 0确实抛出不同的错误。

3 个答案:

答案 0 :(得分:3)

if (mysql_query($result)) {

尝试mysql_num_rows。

答案 1 :(得分:1)

这里有一些问题。

1)SQL注入漏洞,不要直接在查询中传递超全局$ _POST或$ _GET或任何其他用户提供的变量! 在将变量放入查询之前至少使用 mysql_real_escape_string() ,或者更好地查看参数化查询,这是避免SQL漏洞的最佳方法

2)

$result = mysql_query($sql);
// check if the request returned 1 or 0 rows from the database
if (mysql_query($result)) ....

这不会检查请求是否返回1行或0行,您应该在此使用mysql_num_rows()

if(mysql_num_rows() == 1)  //or whatever you need to check

3)

session_start();session_unset();session_destroy();
// start a new session
session_start();
应该在页面中的任何内容之前调用

session_start()。不知道为什么这种调用,取消,破坏,在这里回忆它的冗余。如果您想要其他ID,请使用session_regenerate_id();

正如其他人所说,在查询中使用一些错误报告,例如

$result = mysql_query($sql) or die(mysql_error())

实际看到失败的地方,地点和原因。

答案 2 :(得分:0)

问题是你的疑问。首先检查你的陈述并使用它:

$result = mysql_query($sql) or die(mysql_error());

而不是

$result = mysql_query($sql);

因此,您可以看到SQL查询中是否有任何错误。