最近打算把博客转移到typecho平台,选了一个风格我的比较喜欢的主题,即Akina for Typecho 主题模板,在这里先感谢题主的开源分享,可是在使用过程当中一开始就出现“500 Database Query Error”问题。
在typecho的index.php文件最开始位置加入如下代码。php
define('__TYPECHO_DEBUG__',true);
再次打开网页,查看网页源代码后发现以下错误提示:html
<pre><code><h1>SQLSTATE[HY000]: General error: 1 near "&": syntax error</h1>Typecho_Db_Query_Exception: SQLSTATE[HY000]: General error: 1 near "&": syntax error in /www/users/root/WEB/var/Typecho/Db/Adapter/Pdo.php:105 Stack trace: #0 /www/users/root/WEB/var/Typecho/Db.php(354): Typecho_Db_Adapter_Pdo->query('SELECT typecho_...', Object(PDO), 1, 'SELECT') #1 /www/users/root/WEB/var/Typecho/Db.php(384): Typecho_Db->query(Object(Typecho_Db_Query), 1) #2 /www/users/root/WEB/usr/themes/Akina/index.php(39): Typecho_Db->fetchAll(Object(Typecho_Db_Query)) #3 /www/users/root/WEB/var/Widget/Archive.php(2022): require_once('/www/users/root...') #4 /www/users/root/WEB/var/Typecho/Router.php(138): Widget_Archive->render() #5 /www/users/root/WEB/index.php(26): Typecho_Router::dispatch() #6 {main}</code></pre>
经过查看错误代码能够看到错误发生在"Akina/index.php(39): Typecho_Db->fetchAll(Object(Typecho_Db_Query))"函数,经过打印传入参数fetchAll()能够看到是一个查询语句:数据库
["where"]=> string(176) " WHERE ("type" = #param:0 # && "status" = #param:1# && "created" < #param:2# ) AND (typecho_contents."cid" != #param:3# ) OR ("authorId" = #param:4# && "status" = #param:5# )"
看到这里我才发现我用的是SQLITE数据库,在SQLITE数据库里是不支持"&&"作逻辑与运算符的,经过将"Akina/index.php"文件如下代码中的"&&"改成"AND"后从新加载页面,错误消失,打开页面正常。函数
$select2 = $this->select()->where('type = ? && status = ? && created < ?', 'post','publish',time()); if($uid) $select2->orWhere('authorId = ? && status = ?',$uid,'private');
最后我对MYSQL、SQL Server、SQLite数据库进行实验后,只有MYSQL数据库支持"&&",三者都能支持"AND",因此在写SQL语句中咱们尽可能采用标准的"AND"做为逻辑与运算符。typecho