Php mysqli没有结果

时间:2014-08-30 12:32:40

标签: php mysqli special-characters mysql-real-escape-string

基本上我的问题是php中的mysql在某些情况下会返回一个没有错误的空数组。

我从表格中获得所有产品'新产品'其名称与调用的url中的名称相同。

所以当我打电话的时候: http://domain.com:9090/db/product/3-Acetyl-5-bromopyridine

正在调用的查询是(在url_decode之后):

SELECT * FROM `newproducts` WHERE `name` = '3-Acetyl-5-bromopyridine' LIMIT 1

正确返回所有产品。

但如果我打电话: http://domain.com:9090/db/product/%5B3aa,4a%28E%29,5b,6aa%5D-4-%5B4-%283-Chlorophenoxy%29-3-oxo-1-butenyl%5Dhexahydro-5-hydroxy-2H-cyclopenta%5Bb%5Dfuran-2-one 在我做urldecode后,查询就是这个(在浏览器中使用var_dump):

SELECT * FROM `newproducts` WHERE `name` = '[3aa,4a(E),5b,6aa]-4-[4-(3-Chlorophenoxy)-3-oxo-1-butenyl]hexahydro-5-hydroxy-2H-cyclopenta[b]furan-2-one' LIMIT 1

返回NO结果(空数组),没有错误。

同样,phpmyadmin中的上述确切查询正确地返回结果。

最后,我在运行查询之前尝试使用以下行,但没有运气:

mysqli_set_charset($con, "utf8");
mysqli_real_escape_string($con, $name);

提前致谢!

查询代码:

function getOneResFromDB($con, $text) {
    mysqli_set_charset($con, "utf8");
    mysqli_real_escape_string($con, $text);

    $query = "SELECT * FROM `newproducts` WHERE `name` = '" . $text . "' LIMIT 1";

    $result = mysqli_query($con, $query) or die(mysqli_error($con));

    $array = array();
    while ($row = mysqli_fetch_assoc($result)) {
        $array[] = $row;
    }

    return $array;
}

1 个答案:

答案 0 :(得分:0)

我也必须使用html_entity_decode。结果似乎相同,但即使使用var_dump也是如此,因为某些字符是由Web浏览器自动转换的。 html_entity_decode解决了它。