0

我遇到了一个奇怪的问题,我正在尝试使用 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。任何想法问题出在哪里?

4

2 回答 2

2

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 注入是成功的。您应该使用准备好的语句而不是将变量连接到查询中。

于 2017-03-23T17:22:30.477 回答
1

感谢 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
        }

于 2017-03-23T17:59:52.333 回答