手动运行查询返回行时,使用PHP从MySQL查询中不返回行
我使用jQueryAjax调用返回JSON的PHP页面简单API。 这是代码手动运行查询返回行时,使用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)
<?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>