【发布时间】:2019-07-30 09:11:01
【问题描述】:
我正在使用 jquery ajax 调用返回 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);
执行此脚本时返回以下 JSON
{"is_error":"no","num_rows":0,"locations":null,"date":"2019-07-30","status":"ok","sql":"select * from locations where user_id='0123456789' and DATE(timestamp) = '2019-07-30'"}
这里是解析后的版本,方便查看
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) 在输出后回显
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
)
【问题讨论】:
-
大胆猜测...您确定您的应用程序连接到正确的数据库吗?
-
hack 是的,服务器上只有一个数据库。
-
你应该使用准备好的语句。现在你对 sql 注入很开放。
-
要在实时环境中从 PHP 中获取错误,请将这 4 行添加到要调试
ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);的任何基于MYSQLI_的脚本的顶部。这将强制任何MYSQLI_错误生成一个您可以在浏览器上看到的异常以及正常的 PHP 错误。 -
请用“`”写时间戳字段。因为它是保留关键字,我认为如果这是问题,问题可能会得到解决。
标签: php mysql json phpmyadmin