我正在尝试根据字段中的天气数据显示数据是新的。而不是只显示新的数据,而是显示所有数据。有人可以指出我的错误。非常感谢
<?php
include("../../js/JSON.php");
$json = new Services_JSON();
// Connect to MySQL database
mysql_connect('localhost', 'root', '');
mysql_select_db(sample);
$page = 1; // The current page
$sortname = 'id'; // Sort column
$sortorder = 'asc'; // Sort order
$qtype = ''; // Search column
$query = ''; // Search string
$new = 1;
// Get posted data
if (isset($_POST['page'])) {
$page = mysql_real_escape_string($_POST['page']);
}
if (isset($_POST['sortname'])) {
$sortname = mysql_real_escape_string($_POST['sortname']);
}
if (isset($_POST['sortorder'])) {
$sortorder = mysql_real_escape_string($_POST['sortorder']);
}
if (isset($_POST['qtype'])) {
$qtype = mysql_real_escape_string($_POST['qtype']);
}
if (isset($_POST['query'])) {
$query = mysql_real_escape_string($_POST['query']);
}
if (isset($_POST['rp'])) {
$rp = mysql_real_escape_string($_POST['rp']);
}
// Setup sort and search SQL using posted data
$sortSql = "order by $sortname $sortorder";
$searchSql = ($qtype != '' && $query != '') ? "where ".$qtype." LIKE '%".$query."%' AND new = 1" : '';
// Get total count of records
$sql = "select count(*)
from act
$searchSql";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$total = $row[0];
// Setup paging SQL
$pageStart = ($page -1)*$rp;
$limitSql = "limit $pageStart, $rp";
// Return JSON data
$data = array();
$data['page'] = $page;
$data['total'] = $total;
$data['rows'] = array();
$sql = "select *
from act
$searchSql
$sortSql
$limitSql";
$results = mysql_query($sql);
while ($row = mysql_fetch_assoc($results)) {
$data['rows'][] = array(
'id' => $row['id'],
'cell' => array($row['id'], $row['slot'], $row['service'], $row['activity'], $row['department'], $row['company'], $row['address'], $row['user'], $row['item'], $row['filebox'], date('d/m/Y',strtotime($row['date'])), $row['quantity'], $row['type'], $row['new'])
);
}
echo $json->encode($data);
?>
答案 0 :(得分:4)
您应该通过查看SQL查询来调试SQL,而不是在生成SQL查询的PHP代码上调试SQL。如果您echo $sql
并查看它,您可能会更容易看到任何语法错误。
你也可以复制&amp;粘贴该SQL并尝试在MySQL命令工具中执行它,看看会发生什么,它是否提供您想要的结果,您可以对其进行分析或使用EXPLAIN等。
您使用mysql_real_escape_string()
表示整数,列名和SQL关键字(ASC
,DESC
)。该转义函数用于转义仅字符串文字或日期文字。它对于转义不带引号的整数,列名,SQL关键字或任何其他SQL语法是没用的。
对于整数,使用(int)
将输入强制转换为整数。
对于列名称或SQL关键字,请使用白名单地图 - 请参阅演示文稿中的示例http://www.slideshare.net/billkarwin/sql-injection-myths-and-fallacies
您没有测试任何功能返回的错误状态。如果发生某些错误,ext / mysql中的大多数函数都会返回false
。您应该在每次调用mysql函数后检查它,如果发生错误则报告错误。
您正在使用常量名称sample
而不是引用字符串"sample"
来选择数据库。这可能是你的故意,我只是注意到它。
此外,这与您的错误无关,但您应该upgrade to PHP 5。 PHP 4已经结束了两年多了。
答案 1 :(得分:0)
再次查看代码和所有建议我认为我应该使用AND子句而不是WHERE。例如代码 $ searchSql =($ qtype!=''&amp;&amp; $ query!='')? “where”。$ qtype。“LIKE'%”。$ query。“%'AND new = 1”:''; 这是WHERE子句?基本上翻译为:
$ sql =“select * 从行为 $ searchSql $ sortSql $ limitSql“;&lt; - 原始代码
$ sql =“select * 从行为 公司LIKE'%demo%'AND new = 1 $ sortSql $ limitSql“;&lt; -updated code
我正走在正确的轨道上吗?