Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql\u real\u escape\u string()只是生成一个空字符串?_Php_Mysql_Ajax_Mysql Real Escape String - Fatal编程技术网

Php mysql\u real\u escape\u string()只是生成一个空字符串?

Php mysql\u real\u escape\u string()只是生成一个空字符串?,php,mysql,ajax,mysql-real-escape-string,Php,Mysql,Ajax,Mysql Real Escape String,我使用jQueryAjax请求一个名为like.php的页面,该页面连接到我的数据库并插入一行。这是like.php代码: <?php // Some config stuff define(DB_HOST, 'localhost'); define(DB_USER, 'root'); define(DB_PASS, ''); define(DB_NAME, 'quicklike'); $link = mysql_connect(DB_HOST, DB_USER, DB_PASS) o

我使用jQueryAjax请求一个名为
like.php
的页面,该页面连接到我的数据库并插入一行。这是
like.php
代码:

<?php

// Some config stuff
define(DB_HOST, 'localhost');
define(DB_USER, 'root');
define(DB_PASS, '');
define(DB_NAME, 'quicklike');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('ERROR: ' . mysql_error());
$sel = mysql_select_db(DB_NAME, $link) or die('ERROR: ' . mysql_error());

$likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));
$timeStamp = time();

if(empty($likeMsg))
    die('ERROR: Message is empty');

$sql = "INSERT INTO `likes` (like_message, timestamp)
        VALUES ('$likeMsg', $timeStamp)";

$result = mysql_query($sql, $link) or die('ERROR: ' . mysql_error());

echo mysql_insert_id();

mysql_close($link);

?>
所有这些jQuery代码都运行良好,我自己已经独立测试过了


非常感谢您的帮助。

您是否1000%确定
$\u POST[“likeMsg”]
确实包含一些内容

至于返回空值的
mysql\u real\u escape\u string()
,则表示只有一种情况会发生这种情况:

注意:在使用MySQL\u real\u escape\u string()之前需要MySQL连接,否则会生成E\u警告级别的错误,并返回FALSE。如果未定义链接标识符,则使用最后一个MySQL连接


不过,这里的情况似乎不是这样,因为您确实打开了一个连接。奇怪。

执行$u POST['likeMsg']的var\u转储,以及$likeMsg的var\u转储。这将为您提供出错的信息。

由于其他答案没有明确说明具体要做什么,我的建议如下:

当你这样做的时候

$db_connection = new mysqli($SERVER, $USERNAME, $PASSWORD, $DATABASE);
你需要像这样逃跑:

$newEscapedString = $db_connection->real_escape_string($unescapedString);

注意:因为人们对这个(WTF!?)投了反对票,这里是官方php手册的官方页面,它正好说明了我发布的内容:。

对于现在可能再次发现这个问题的人,我在从PHP5迁移到PHP7时遇到了这个问题。我正在从

string mysql\u real\u escape\u string(string$unescaped,[resource$link=NULL])

致:

string mysqli\u real\u escape\u string(mysqli$link,string$escapestr)


因此,换句话说,数据库$link不再是可选的,而是移动到第一个参数位置。如果省略,它将返回一个空字符串,显然没有错误。

mysql\u real\u escape\u string()将返回空白响应,前提是您尚未连接到数据库

当我用谷歌搜索这个问题时,我读到了。不过,在使用
mysql\u real\u escape\u string()
之前,我已经启动了一个数据库连接。@James那么一定是数据本身。你能显示一个
$\u POST
的转储吗?@James或者,你能尝试显式地将连接指定为一个参数吗?我就是在这种情况下!在执行SQLDO
var_dump($likeMsg)之前;echo$sql;死亡
并查看这些变量包含什么。然后,如果可以,将SQL输出粘贴到phpMyAdmin并检查结果。+1我查看了文档。也许人们更习惯于看到过程形式而不是面向对象的形式。
$newEscapedString = $db_connection->real_escape_string($unescapedString);