PHP mysql_real_escape_string返回空字符串

Dra*_*ake 10 php mysql database mysql-real-escape-string

我正在尝试对我的数据库应用程序(对于一个类)进行一些安全性和清理.开始时,我正在尝试使用mysql_real_escape_string,但每当我使用它时,它总是返回一个空字符串!

这是连接代码:

include_once ("./connect.php");
$db_connection = new mysqli($SERVER, $USERNAME, $PASSWORD, $DATABASE);
if (mysqli_connect_errno()) {
    echo("Can't connect to MySQL Server. Error code: " . mysqli_connect_error());
    return null;
}
$field = mysql_real_escape_string($_GET['value']);
$upc = $_GET['upc'];
$type = $_GET['field_type'];
echo $field;
echo $upc;
echo $type;
Run Code Online (Sandbox Code Playgroud)

当php实际执行时,$ upc和$ type被打印出来,但是没有$ field字段.香港专业教育学院尝试使用中间字符串,但我得到相同的结果.我真的很不知道这里出了什么问题.

此外,我已经完成了一个var_dump $field,它声称mysql_real_escape_string返回FALSE,这应该在没有连接(?)时发生,但有一个.

jer*_*oen 18

您正在使用mysqli而不是mysql进行连接,因此您需要 mysqli_real_escape_string

虽然你可以很容易地在mysqli中使用预处理语句然后你也不需要......

  • @Panique注意`mysql_real_escape_string`在出错时返回`false`(比如没有mysql数据库连接......),这相当于一个空字符串,这就是为什么OP最终得到一个空字段. (3认同)
  • @Panique是的,因为你不应该把mysql_和mysqli混在一起. (2认同)

Bab*_*aba 8

请参阅PHP文档http://php.net/manual/en/function.mysql-real-escape-string.php

MySQL连接.如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接.如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用mysql_connect()一样.如果未找到或建立连接,则会生成E_WARNING级别错误.

这意味着您需要一个活动连接才能使用此功能

如果您没有看到任何错误,请尝试

error_reporting(E_ALL);
ini_set('display_errors','On');
Run Code Online (Sandbox Code Playgroud)

mysql_real_escape_string 替代

使用

  $escaped = htmlspecialchars($_GET['value'], ENT_QUOTES, "ISO-8859-1");
Run Code Online (Sandbox Code Playgroud)

要么

   $escaped = filter_var($_GET['value'], FILTER_SANITIZE_STRING);     
Run Code Online (Sandbox Code Playgroud)


mum*_*ush 5

你得到任何空字符串,因为该函数有两个参数; 实际连接到数据库,然后是字符串.用这个:

$sanitizedField = mysqli_real_escape_string($connection, $field);
Run Code Online (Sandbox Code Playgroud)