Php mysql\u real\u escape\u string()只是生成一个空字符串?
我使用jQueryAjax请求一个名为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
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或者,你能尝试显式地将连接指定为一个参数吗?我就是在这种情况下!在执行SQLDOvar_dump($likeMsg)之前;echo$sql;死亡
并查看这些变量包含什么。然后,如果可以,将SQL输出粘贴到phpMyAdmin并检查结果。+1我查看了文档。也许人们更习惯于看到过程形式而不是面向对象的形式。
$newEscapedString = $db_connection->real_escape_string($unescapedString);