php _POST查询参数失败,但硬编码文本查询成功

时间:2016-02-27 06:36:06

标签: php mysql post

<?php

$servername = "localhost";
$username = "user";
$password = "password";
$database = "mydatabase";


$mypassword = "mypassword";

$receivedPassword = $_POST["pwd"];
if ($receivedPassword != $mypassword) {
    print "cedential failure";
} else {
    $unfiltered = $_POST["query"];
    //  print("unfiltered $unfiltered");

    $myquery = htmlspecialchars($unfiltered);
// Create connection
    $conn = new mysqli($servername, $username, $password, $database);
    // print("filtered: $myquery");
// Check connection
    if ($conn->connect_error) {

        die("Connection failed: " . $conn->connect_error);
    } else {
        print("conn ssuccessfull");
    }
    print('performing query: ' . $myquery);
    //$quer = (string)$myquery;
    $res = $conn->query($myquery); // or die(mysql_error());
    $enc = mb_detect_encoding($myquery);
    print("<br> encoding is: $enc <br>");
    $rows = array();
    while ($r = mysqli_fetch_assoc($res)) {
        $rows[] = $r;
        print($r);
    }
    print("ehere");
    print json_encode($rows);
    $conn->close();
}


?>

这是我打印回来的一个例子。

  

conn successl
  执行查询:SELECT * FROM music_log2 WHERE(central_time&gt;'2016-02-03 2:00:00'AND central_time&lt;'2016-02-03 4:00:00')
  编码是:ASCII
  ehere []

查看服务器日志,我看到:

  

2/27/2016 4:41:26 AM - www:PHP警告:mysqli_fetch_assoc()要求参数1为mysqli_result,第43行的/path/to/my/file.php中给出布尔值

请注意,在我的示例输出中,我没有得到结果。事实上,服务器日志表明在以下情况之后$ res为false:

res = $conn->query($myquery); // or die(mysql_error());

我已经尝试过die选项,因为你可以看到注释掉,但我没有输出错误,只是没有打印。

当我通过将查询行更改为:

来将确切查询硬编码时
$res = $conn->query("SELECT * FROM music_log2 WHERE (central_time > '2016-02-03 2:00:00' AND central_time < '2016-02-03 4:00:00')");

它很有效。 以下是更改上述行的一些输出:

  

conn successfull
执行查询:SELECT * FROM music_log2 WHERE(central_time&gt;'2016-02-03 2:00:00'AND central_time&lt;'2016-02-03 4:00:00')
编码是:ASCII
  ArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArray [{ “field_number”: “6”, “值”:“一切   除了轮换“,”central_time“:”2016-02-03   三点59分15" 秒, “USER_AGENT”: “API”, “ID”: “1084793”},{ “field_number”: “2”, “值”:“标题   战斗 “ ”central_time“:” 2016年2月3日   三点59分15" 秒, “USER_AGENT”: “API”, “ID”: “1084794”},{ “field_number”: “3”, “值”: “超级”, “central_time”:“2016-02- 03   三点59分15" 秒, “USER_AGENT”: “API”, “ID”: “1084795”},{ “field_number”: “4”, “值”: “氯”, “central_time”:“2016-02- 03   三点59分15" 秒, “USER_AGENT”: “API”, “ID”: “1084796”},   
...

帮助。我很难过。已经工作了2天了。

我也尝试用双引号包装查询:

$res = $conn->query('"' . $myquery . '"');

相同的空结果。

2 个答案:

答案 0 :(得分:1)

htmlspecialchars转换&lt;到&lt;和&gt;到&gt;,它不会在你的MySQL查询中传播。

答案 1 :(得分:0)

我不确定你的问题是什么,但我仍然能以这种方式提供帮助。

在PHP脚本中使用&#34; .mysqli_connect_error()&#34;方法,看看什么是繁琐地给你错误。像这样使用它:

  if(!$connection){
    echo "Connectionn Error...".mysqli_connect_error();
}else{
    echo"Database connection Success...";
}

在浏览器中调用PP脚本,您应回显错误!