PHP查询返回true但if语句仍在运行

时间:2012-05-06 20:25:20

标签: php mysql mysql-real-escape-string

我在发送查询时遇到问题,这让我有点疯狂,这就是我所说的:

 $query = "INSERT INTO combined(v_products_model, v_products_image, v_products_description_1, v_products_name_1, v_products_quantity, v_tax_class_title, v_status, EOREOR) " .
            "VALUES ('$fileName', '$fileName', '$description', '$description', '10', '--none--', 'Active', 'EOREOR')";
    mysql_real_escape_string($fileName);
    mysql_real_escape_string($description);
    $queryResult = mysql_query($query, $connect);
//  die(var_dump($queryResult));

if (!$queryResult) {
    die("Error with query: line 40 <br>
                 Query: $query <br>
                 Error: " . mysql_error());
}

由于某些原因,if语句总是运行,我已经尝试将$ queryResult == false作为参数,但结果相同。

我知道$queryResult不是假的,因为我在它上面运行die()语句并返回'1',我也运行var_dump并返回'boolean true'。

mysql_error()永远不会返回任何结果。如果有人能告诉我块为什么会运行,我会很感激。

这是实际打印的内容,以及它不会逃避查询的方式:

Error with query: line 40 
Query: INSERT INTO combined(v_products_model, v_products_image, v_products_description_1, v_products_name_1, v_products_quantity, v_tax_class_title, v_status, EOREOR) VALUES ('ts_aiw_wereall.jpg', 'ts_aiw_wereall.jpg', 'ALICE IN WONDERLAND we're a sk PUR TS S', 'ALICE IN WONDERLAND we're a sk PUR TS S', '10', '--none--', 'Active', 'EOREOR') 
Error:

2 个答案:

答案 0 :(得分:1)

从您生成的查询中:

'ALICE IN WONDERLAND we're a sk PUR TS S'
                       ^--- unescaped quote

由于您正在使用mysql_real_escape_string() AFTER 生成查询字符串,因此您无法转义进入查询的文本,并且查询失败。 PHP不会神奇地回到过去并重新调整你的$query = ...行以反映转义呼叫的值。

这并不能解释为什么没有显示错误消息。关于我可以想到的一切是你有多个连接打开MySQL,并且正在$connect连接上执行查询,这不是默认连接(例如最后创建的连接),所以mysql_error()从某些没有错误的OTHER连接返回错误结果。

尝试mysql_error($connect),看看是否收到任何错误消息。

答案 1 :(得分:-2)

这部分代码会因为引号而导致查询失败。

'ALICE IN WONDERLAND we're a sk PUR TS S', 'ALICE IN WONDERLAND we're a sk PUR TS S'

您可以在插入之前使用函数addslashes()来转义这些值。 e.g

addslashes(ALICE IN WONDERLAND we're a sk PUR TS S);

请记住使用stripslashes()删除使用addslashes()上的值的引号转义。

其次,你必须放置这些行

mysql_real_escape_string($fileName);
mysql_real_escape_string($description);

在构建查询之前。