我在发送查询时遇到问题,这让我有点疯狂,这就是我所说的:
$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:
答案 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);
在构建查询之前。