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
}
我遇到了一个奇怪的问题,我正在尝试使用 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
}