[英]PHP PDO Fetch_Assoc not returning correctly
我搜索过,也许我正在寻找错误的东西,但我需要以下代码的帮助。 我肯定错过了什么...
数据库类:
class Database {
private static $link = null;
private static function dbLink() {
if(self::$link) {
return self::$link;
}
$dsn = null;
switch(DB_DRVR) {
case 'mysql':
$dsn = DB_DRVR . ":host=" . DB_HOST . ";dbname=" . DB_NAME;
break;
}
self::$link = new PDO($dsn, DB_USER, DB_PASS);
return self::$link;
}
public static function fetchAssoc($sql) {
$stmt = self::query($sql);
$result = array();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result;
}
public static function __callStatic($name, $arguments) {
$callback = array(self::dbLink(), $name);
return call_user_func_array($callback, $arguments);
}
}
返回错误的代码部分:
$sql = "SELECT group FROM users WHERE username='ryan';";
$dbSQL = Database::fetchAssoc($sql);
echo $dbSQL['group'];
数据库设置:
- id(auto_increment,primary)
- 名字(TINYTEXT)
- 用户名(TINYTEXT)
- 密码(TINYTEXT)
- 盐(TINYTEXT)
- 电子邮件(TINYTEXT)
- 组(TINYTEXT)
- 特权(TINYTEXT)
我收到以下错误:
Fatal error: Call to a member function fetch() on a non-object
in C:\public_html\kernel\database.php on line 38
但奇怪的是,如果我将SQL更改为:
$sql = "SELECT * FROM users WHERE username='ryan';";
我没有收到错误,它显示正确,如果我将SQL语句更改为:
$sql = "SELECT username FROM users WHERE username='ryan';";
并调用$ dbSQL ['username']使用上面的函数可以正常工作。
我的问题:为什么当我尝试在$ dbSQL数组中使用'group'列时,我收到一个错误,但是当我尝试使用'username'列时,一切运行正常。 我错过了什么?
谢谢,瑞恩
SELECT `group` FROM users WHERE username='ryan'
GROUP
是SQL中的保留关键字,如果使用它,则查询会产生错误。 引用它:
SELECT `group` ...
听起来好像你的查询失败了,因为你的RDBMS保留了单词group
。
为了避免将来出现这种问题:
实现一些错误检查,您将从数据库服务器中看到有关哪个部分查询失败的线索。 有几种方法可以做到这一点:
self::errorInfo()
,打印或记录输出。 PDO::ERRMODE_EXCEPTION
。 请参阅有关错误和错误处理的手册页
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.