您好我正在努力在特定时间段内展示活动。代码如下。当我在没有绑定参数的情况下运行查询时,它正在工作,但这样做会给我带来一些问题。代码如下:
$category = $_GET['category'];
$time = $_GET['time'];
$time_ahead = strtotime("+1 month", $time);
$query = "SELECT * FROM happenings ";
$query .= "WHERE ((date_start > ? AND date_start < ?) OR (date_start < ? AND date_end > ?) OR (date_end > ? AND date_end < ?))";
if($category)
$query .= " AND category = ?";
$query .= " ORDER BY date_start ASC";
$stmt = $mysqli->prepare($query) or die ("Could not prepare statement:" . $mysqli->error);
if($category)
$stmt->bind_param('sssssss', $time, $time_ahead, $time, $time_ahead, $time, $time_ahead, $category) or die("Could not bind parameters statement:" . $stmt->error);
else
$stmt->bind_param('ssssss', $time, $time_ahead, $time, $time_ahead, $time, $time_ahead) or die("Could not bind parameters statement:" . $stmt->error);
$stmt->execute() or die("Execute failed: (" . $stmt->errno ." ". $stmt->info .") " . $stmt->error);
$result = $stmt->get_result();
我得到的错误是:
无法运行查询:SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在'附近使用正确的语法? AND date_start&lt; ?)或(date_start&lt;?AND date_end&gt;?)或('第1行
当我打印出查询时,我得到了这个
SELECT * FROM happenings WHERE ((date_start > ? AND date_start < ?)
OR (date_start < ? AND date_end > ?) OR (date_end > ? AND date_end < ?))
ORDER BY date_start ASC
现在已经有一段时间了,但我想不出语法错在哪里。它没有绑定就运行良好,所以我还需要做些什么吗?我不相信我使用任何保留的关键字等。我感谢任何帮助!
答案 0 :(得分:1)
为了记录,答案在上面的评论中被猜到了。
代码意外地调用了$mysqli->query()
而不是$mysqli->prepare()
。
query()
方法无法识别参数占位符语法。