Php 如何返回计数函数的数目?

Php 如何返回计数函数的数目?,php,mysql,sql,Php,Mysql,Sql,我需要测试我的查询是否返回1或0(因此是否有与输入的键匹配的键) 这是我的密码: $key=$_POST['key']; $queryKey = mysql_query("SELECT COUNT(*) FROM `smf_invites` WHERE `key` = '$key'"); $query = mysql_num_rows($queryKey); if( !empty ($key)) { echo 'You have entered a key'; if

我需要测试我的查询是否返回
1
0
(因此是否有与输入的键匹配的键)

这是我的密码:

 $key=$_POST['key'];
 $queryKey = mysql_query("SELECT COUNT(*) FROM `smf_invites` WHERE `key` = '$key'");
 $query = mysql_num_rows($queryKey);

 if( !empty ($key))
 {
    echo 'You have entered a key';
    if (!empty ($query))
    {
        echo 'A key is corresponding';
    }

 }
编辑: $connect=新的mysqli(“XXX”、“XXX”、“XXX”、“smf”)

现在我的代码给我的错误如下

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in D:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\registration.php on line 32

Warning: mysqli_query() expects at least 2 parameters, 1 given in D:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\registration.php on line 33

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in D:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\registration.php on line 34

此代码存在多个问题

  • 如果未设置
    $\u POST['key']
    ,您将收到PHP通知
  • $queryKey=mysql\u查询(“从`smf\u邀请`WHERE`key`='$key`中选择COUNT(*))将始终返回一行。因此,检查返回的行数将不起作用
  • 下面是应该解决您的问题的更新代码

     if( isset($_POST['key']))
     {
        echo 'You have entered a key';
        $key = mysql_real_escape_string($_POST['key']);
        $queryKey = mysql_query("SELECT 1 FROM `smf_invites` WHERE `key` = '$key'");
        if (mysql_num_rows($queryKey))
        {
            echo 'A key is corresponding';
        }
     }
    
    。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO


    您的代码对您也是开放的

    我为您创建了一个类,并举例说明

    <?php
    class MyDb {
        protected $link;
        public function __construct() {
            if (!$this->link = mysql_connect('localhost', 'user', 'password')) {
                echo 'Could not connect to mysql';
                exit;
            }
    
            if (!mysql_select_db('table_name', $this->link)) {
                echo 'Could not select database';
                exit;
            }
        }
    
        public function exist($id) {
            if (is_int($id)) {
                $sql = "SELECT COUNT(*) FROM smf_invites WHERE `key` = '$id'";
                $result = mysql_query($sql, $this->link);
                return  mysql_num_rows($result);
            } else {
                return false;
            }
        }
    }
    
    
    $x = $_POST['key'] = 1;
    
    if(!empty($_POST['key'])) {
        $db = new MyDb();
        if($db->exist($x)) {
            echo "exist";
        } else {
            echo "no exist";
        }
    }
    
    结合约翰的回答

    根据您新编辑的代码:

    mysqli
    要求为函数传递DB连接

    更改:

    $key = mysqli_real_escape_string($_POST['key']);
    
    致:

    或者(使用其中的变量
    $key

    然后是:

    $queryKey = mysqli_query("SELECT 1 FROM `smf_invites` WHERE `key` =   '$key'");
    
    致:


    故障排除/调试

    添加到文件的顶部,这将有助于查找错误

    <?php 
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    // rest of your code
    

    在打开PHP标记后立即将错误报告添加到文件顶部,例如
    提示:如果numrows不仅仅是零…根据
    键的生成方式,您有MySQL注入漏洞。请改用
    mysqli
    。@uoɯuoɹqɔ单独使用
    mysqli
    并不能防止注入<代码>mysqli
    与准备好的语句一起执行。;-)@Rameleu您使用哪个MySQL API连接,以及如何连接?你需要精确的回答。谢谢你的快速回答。我将此作为输出:警告:mysql_num_rows()希望参数1是resource,布尔值在第30行的D:\Program Files(x86)\EasyHP-DevServer-14.1VC11\data\localweb\registration.php中给出。您的查询失败。使用mysql_error()找出原因。另外,您是否验证了与MySQL的连接是否成功?好的,这个答案帮助我找到了问题所在。查询现在正在识别是否存在对应的键。非常感谢你的帮助,我很感激!
    $queryKey = mysqli_query("SELECT 1 FROM `smf_invites` WHERE `key` =   '$key'");
    
    $queryKey = mysqli_query($connect, 
    "SELECT 1 FROM `smf_invites` WHERE `key` =   '$key'") 
    or die(mysqli_error($connect));
    
    <?php 
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    // rest of your code