PHP 7.1 用户检查查询发出警告:E:\XAMPP\htdocs 中遇到非数字值

PHP 7.1 query for User check gives out a Warning: A non-numeric value encountered in E:\XAMPP\htdocs

我遇到了一个奇怪的问题,我正在尝试使用 PHP 7.1 实现一个简单的 Usercheck。

$con = getConnection();
        //check connection
        if(!$con){
            die("Connection to database failed".  mysql_connect_error() );
        } else echo ("connection to database successfull");


        //checking if nickname already exists
        $checkUserExistanceSql = "SELECT nickname FROM user WHERE nickname='" + $nickname+ "'";
        //sending query to sql database
        $doesExist = mysqli_query($con, $checkUserExistanceSql)
            or die ("Fehler in der Datenbankabfrage");

        if(mysqli_num_rows($doesExist)>=1){

            echo "Nickname not available, use another name";

        }

但是我收到了这个警告

警告:在 E:\XAMPP\htdocs...第 29 行中遇到非数字值 第 29 行是 $checkUserExistanceSql。任何想法问题出在哪里?

PHP 上的字符串连接使用 .(点)作为运算符,而不是 +(加号)。

您的实际代码使用 +:

$checkUserExistanceSql = "SELECT nickname FROM user WHERE nickname='" + $nickname+ "'";

这就是为什么 PHP 告诉 $nickname 不是数字变量。它不能对字符串求和,只能连接。

将您的运算符更改为 .,它将起作用:

$checkUserExistanceSql = "SELECT nickname FROM user WHERE nickname='" . $nickname . "'";

您也可以使用此语法,结果相同但代码更清晰:

$checkUserExistanceSql = "SELECT nickname FROM user WHERE nickname='{$nickname}'";

安全警报

您的代码是 SQL injection 的后续代码。您应该使用准备好的语句,而不是将变量连接到查询中。

感谢 Yolo 和 Elias Soares 的帮助。 该脚本现在运行完美,我还使用准备好的语句来应对 elias 提到的 sql 注入的风险。

$con = getConnection();
        //check connection
        if(!$con){
            die("Connection to database failed".  mysql_connect_error() );
        } else echo ("connection to database successfull");



        //prepared statement for sql query
        $stmt = $con -> prepare("SELECT nickname FROM user WHERE (nickname=?)");
        $stmt -> bind_param("s", $nickname);
      
        $stmt->execute();

        //checkking result, if nickname is already used
        if($stmt->get_result()){
            echo "0";
        } else {
            //insert user
        }