好的我正在尝试将MySQL请求转换为PDO MySQL。我之前已经这样做但是我没有让这个工作:
$query = 'SELECT key FROM turl WHERE key = "'.$k.'"';
$req = $db->query($query);
if($req->rowCount() > 0) {
$key = $row['key'];
}
以下是PDO php extentions:
extension=php_pdo.dll
;extension=php_pdo_dblib.dll
;extension=php_pdo_firebird_firebird.dll
;extension=php_pdo_firebird_interbase.dll
;extension=php_pdo_mssql.dll
;extension=php_pdo_mysql_mysqlnd.dll
extension=php_pdo_mysql_libmysql.dll
extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=php_pdo_sqlite_external.dll
我在ServerFault之前发布这里,以防我的PHP代码错误。
顺便说一句,这是错误:
致命错误:在第51行的D:\ Entreprises \ Site web - Dev \ xampp \ htdocs \ ushot \ index.php中的非对象上调用成员函数rowCount()
答案 0 :(得分:5)
根据http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html的列表 - KEY
是一个保留的mysql关键字。
所以你需要用反引号引用它以获得有效的mysql查询
$query = 'SELECT `key` FROM turl WHERE `key` = "'.$k.'"';
下一步:由于您正在使用PDO - 占位符是在查询中插入动态值的首选方式:
$stmt = $db->prepare('SELECT `key` FROM turl WHERE `key` = :key');
$stmt->execute(array(':key' => 42));
$result = $stmt->fetchAll();
var_dump($result);
答案 1 :(得分:0)
我正在寻找不同问题的答案,只是注意到你的PDO扩展名单; 我不得不注释掉extension = php_pdo_mysql_libmysql.dll并删除注释; extension = php_pdo_mysql_mysqlnd.dll来修复我遇到的问题。
然后我在Php.net上发现这个声明似乎支持了我的行动:
mysqlnd是PHP附带的新核心库。它是libmysql的特定于PHP的替代品。如果在系统上找不到libmysql,mysqlnd将用于构建mysql,mysqli和PDO_MySQL扩展。即使存在libmysql,它也可以用来代替libmysql。出于性能原因,建议将mysqlnd用于所有PHP安装。
这是该声明的链接:http://us.php.net/manual/en/migration53.new-extensions.php