这听起来像是个菜鸟问题,但我认为我已经尝试了一切,但由于没有任何进展,我被困了数周。
这是我的工作代码:
//$connect holds my db login details so ill hide it
$query = '
SELECT *,UNIX_TIMESTAMP(CONCAT_WS(" ", ranking_data_date, ranking_data_time)) AS datetime
FROM tbl_ranking_data
ORDER BY ranking_data_date ASC, ranking_data_time ASC LIMIT 60
';
$result = mysqli_query($connect, $query);
$rows = array();
$table = array();
$table['cols'] = array(
array(
'label' => 'Date Time',
'type' => 'datetime'
),
array(
'label' => 'Position',
'type' => 'number'
)
);
while($row = mysqli_fetch_array($result))
我的问题是,它总是从数据库中选择相同的数据(和所有数据)。
要修复此问题,理想情况下是插入where子句,例如:
WHERE user_id=$id_of_current_user
但是我不能输入任何内容,否则会出错。
与上面的代码基本相同,但有区别:
//$connect holds my db login details so ill hide it
$query = '
SELECT *,UNIX_TIMESTAMP(CONCAT_WS(" ", ranking_data_date, ranking_data_time)) AS datetime
FROM tbl_ranking_data
WHERE user_id=$id_of_current_user
ORDER BY ranking_data_date ASC, ranking_data_time ASC LIMIT 60
';
显示此错误:
警告:mysqli_fetch_array()期望参数1为mysqli_result,在第32行的/files/phpfile.php中给出的布尔值
我的理解:查询失败,它返回false(这就是为什么错误谈论布尔值)而不是数组($ result),但它不应该失败!
只有在添加WHERE条件后,它才会失败。
任何帮助表示赞赏。
如何在此代码中插入where子句?
答案 0 :(得分:0)
查询的问题不是where子句,而是where子句中的变量。如果在出现此类问题时回显查询,则可以看到该查询的语法不正确。
PHP不会在使用单引号的字符串中替换变量值。请改用双引号。
此外,请使用反引号引起引用的列名和表名。这样可以避免保留字的问题。
最后,使用参数化查询来避免数据引用问题以及SQL注入。
// $connect holds my db login details so I'll hide it
$query = "
SELECT
*,
UNIX_TIMESTAMP(CONCAT_WS(' ', `ranking_data_date`, `ranking_data_time`)) AS `datetime`
FROM `tbl_ranking_data`
WHERE `user_id` = $id_of_current_user
ORDER BY `ranking_data_date` ASC, `ranking_data_time` ASC
LIMIT 60;
";
$result = mysqli_query($connect, $query);
$rows = array();
$table = array();
$table['cols'] = array(
array(
'label' => 'Date Time',
'type' => 'datetime'
),
array(
'label' => 'Position',
'type' => 'number'
)
);