绑定参数时MySQLi语法错误

时间:2017-04-16 21:44:45

标签: php mysql mysqli

您好我正在努力在特定时间段内展示活动。代码如下。当我在没有绑定参数的情况下运行查询时,它正在工作,但这样做会给我带来一些问题。代码如下:

$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

现在已经有一段时间了,但我想不出语法错在哪里。它没有绑定就运行良好,所以我还需要做些什么吗?我不相信我使用任何保留的关键字等。我感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

为了记录,答案在上面的评论中被猜到了。

代码意外地调用了$mysqli->query()而不是$mysqli->prepare()

query()方法无法识别参数占位符语法。