Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
手动运行查询返回行时,使用PHP从MySQL查询中不返回行_Php_Mysql_Json_Phpmyadmin - Fatal编程技术网

手动运行查询返回行时,使用PHP从MySQL查询中不返回行

手动运行查询返回行时,使用PHP从MySQL查询中不返回行,php,mysql,json,phpmyadmin,Php,Mysql,Json,Phpmyadmin,我使用jQueryAjax调用返回JSON的PHP页面简单API。 这是代码 <?php $response['is_error'] = 'no'; $user = $_POST['user']; $date = $_POST['date']; $sql = "select * from locations where user_id='$user' and DATE(timestamp) = '$date'"; $locations = $conn->query($sql)

我使用jQueryAjax调用返回JSON的PHP页面简单API。 这是代码

<?php 


$response['is_error'] = 'no';
$user = $_POST['user'];
$date = $_POST['date'];

$sql = "select * from locations where user_id='$user' and DATE(timestamp) = '$date'";
$locations = $conn->query($sql) or $response['is_error'] = 'yes';
$response['num_rows'] = $locations->num_rows;

$locations = $locations->fetch_assoc(); 

$response['locations'] = $locations;
$response['date'] = $date;

if($response['is_error'] == 'yes'){
    $response['status'] = "failed";
    $response['error'] = $conn->error;
}else{
    $response['status'] = "ok";
}

$response['sql']=$sql;

echo json_encode($response);
为了便于查看,这里是解析后的版本

date: "2019-07-30"
is_error: "no"
locations: null
num_rows: 0
sql: "select * from locations where user_id='0123456789' and DATE(timestamp) = '2019-07-30'"
status: "ok"
但是,如果我在PHPMyAdmin页面SQL中复制粘贴JSON中回显的SQL,它将返回一行,这确实是有意的,但奇怪的是,它在使用脚本中的PHP执行相同的查询时没有返回任何内容

下面是PHPMyAdmin查询输出的附加屏幕截图

运行
print\r($conn)
echo以下输出

mysqli Object
(
    [affected_rows] => 1
    [client_info] => 5.6.30
    [client_version] => 50630
    [connect_errno] => 0
    [connect_error] => 
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )

    [field_count] => 1
    [host_info] => Localhost via UNIX socket
    [info] => 
    [insert_id] => 0
    [server_info] => 5.6.44-cll-lve
    [server_version] => 50644
    [stat] => Uptime: 94095  Threads: 23  Questions: 77085244  Slow queries: 625  Opens: 814448  Flush tables: 1  Open tables: 5000  Queries per second avg: 819.227
    [sqlstate] => 00000
    [protocol_version] => 10
    [thread_id] => 1035427
    [warning_count] => 0
)

我认为以0开头的用户id产生了问题。您是否可以更改user_id列的数据类型并将其设置为varchar,然后尝试或从查询和表行中删除0,然后进行检查。它应该可以工作。

if(isset($\u POST[“adds”])){
if (isset($_POST["adds"])) {
    $servername = "localhost";
    $username = "root";
    $password = "root";
    $db = "loc";
    $conn = new mysqli($servername, $username, $password, $db);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    $response['is_error'] = 'no';
    $user = $_POST['user'];
    $date = $_POST['date'];
    $sql = "select * from location where user_id='$user' and DATE(timestamp) = '$date'";
    $locations = $conn->query($sql) or $response['is_error'] = 'yes';
    $response['num_rows'] = $locations->num_rows;

    $locations = $locations->fetch_assoc();
    $response['locations'] = $locations;
    $response['date'] = $date;
    if ($response['is_error'] == 'yes') {
        $response['status'] = "failed";
        $response['error'] = $conn->error;
    } else {
        $response['status'] = "ok";
    }
    $response['sql'] = $sql;
    echo json_encode($response);
}
`<html>
<head>
</head>
<body>
    <form method="post">
        <input type="text" name="user"><br>
        <input type="text" name="date"> <br>
        <input type="submit" name="adds">
    </form>
</body>
</html>
$servername=“localhost”; $username=“root”; $password=“root”; $db=“loc”; $conn=newmysqli($servername、$username、$password、$db); 如果($conn->connect\u错误){ die(“连接失败:”.$conn->connect\U错误); } $response['is_error']='no'; $user=$_POST['user']; $date=$_POST['date']; $sql=“从用户标识为“$user”且日期(时间戳)为“$DATE”的位置选择*; $locations=$conn->query($sql)或$response['is_error']='yes'; $response['num_rows']=$locations->num_rows; $locations=$locations->fetch_assoc(); $response['locations]=$locations; $response['date']=$date; 如果($response['is_error']=='yes'){ $response['status']=“失败”; $response['error']=$conn->error; }否则{ $response['status']=“ok”; } $response['sql']=$sql; echo json_编码($response); } `


胡乱猜测。。。你确定用你的应用程序连接到正确的数据库吗?是的,服务器上只有一个数据库。你应该使用准备好的语句。现在,您对sql注入非常开放。要从PHP中获取错误,即使是在实时环境中,也可以将这4行添加到您要调试的基于
MYSQLI\u
的脚本的顶部('display\u errors',1);ini_集(“日志错误”,1);错误报告(E_全部);mysqli_报告(mysqli_报告错误| mysqli_报告严格)。这将强制任何
MYSQLI\uuu
错误生成一个异常,您可以在浏览器上看到该异常以及正常的PHP错误。请将时间戳字段用“`”换行。因为它是保留关键字,所以我认为如果这是问题的话,这个问题可能会得到解决。user_id已经是varchar(12)并且在没有任何0的情况下更改用户没有任何帮助。此脚本的输出应该是纯JSON,否则在解析JSON时应用程序将在前端崩溃。你知道API是什么意思吗?
if (isset($_POST["adds"])) {
    $servername = "localhost";
    $username = "root";
    $password = "root";
    $db = "loc";
    $conn = new mysqli($servername, $username, $password, $db);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    $response['is_error'] = 'no';
    $user = $_POST['user'];
    $date = $_POST['date'];
    $sql = "select * from location where user_id='$user' and DATE(timestamp) = '$date'";
    $locations = $conn->query($sql) or $response['is_error'] = 'yes';
    $response['num_rows'] = $locations->num_rows;

    $locations = $locations->fetch_assoc();
    $response['locations'] = $locations;
    $response['date'] = $date;
    if ($response['is_error'] == 'yes') {
        $response['status'] = "failed";
        $response['error'] = $conn->error;
    } else {
        $response['status'] = "ok";
    }
    $response['sql'] = $sql;
    echo json_encode($response);
}
`<html>
<head>
</head>
<body>
    <form method="post">
        <input type="text" name="user"><br>
        <input type="text" name="date"> <br>
        <input type="submit" name="adds">
    </form>
</body>
</html>