使用PDO的语法错误或访问冲突
我在线迁移我的本地文件,并在我的db脚本中出现PHP问题。 在本地工作正常(运行PHP 5.3.8),但在我的服务器上出现以下错误(PHP 5.3.10)
没有$ DBH-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);
致命错误:在第108行的/.../...php中的非对象上调用成员函数setFetchMode()
使用$ DBH-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);
SQLSTATE [42000]:语法错误或访问冲突:1142 SELECT'命令被拒绝给用户'...'@'205.186.180.26'表'
这是我的代码:
class guest {
public $id;
public $guest_name;
public $url_phrase;
}
$guest = new guest;
if (isset($_GET['p'])) {
$url_phrase = urldecode($_GET['p']);
} else if (isset($_POST['p'])) {
$url_phrase = urldecode($_POST['p']);
}
if (isset($url_phrase)) {
try {
$DBH = new PDO("mysql:host=myhost.com;dbname=mydbname", "myusername", "mypassword");
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$url_phrase = $DBH->quote($url_phrase);
$sql = "SELECT id, guest_name, url_phrase FROM mydbname.invited WHERE url_phrase = $url_phrase";
$stmt = $DBH->query($sql);
$stmt->setFetchMode(PDO::FETCH_INTO, new guest);
$guestNumber = $stmt->rowCount();
if($guestNumber > 0) {
etc...
}
if($guestType == "solo") {
foreach($stmt as $guest) {
$name = $guest->guest_name;
etc...
}
}
} else {
other stuff.. etc..
$DBH = null;
} catch (PDOException $e) {
echo $e->getMessage();
}
}
我已经得到了简单的选择语句作为这个用户正常工作(我不认为它的权限相关),我的问题似乎与我的PDO实现。 我怎样才能摆脱这个错误? 我是以一种奇怪的方式准备/执行这个声明吗? 谢谢你的帮助
我有同样的问题。 在我将代码从本地上传到生产服务器之后,用户拥有所有权限。 问题是数据库名称 - 在我的本地环境中,它与dattabase1类似,在生产中名称不同... prefix_ddatabas1。 我将数据库的名称更改为正确的,并且一切正常。
听起来像服务器上的访问问题:
SQLSTATE [42000]:语法错误或访问冲突:1142 SELECT'命令被拒绝给用户'...'@'205.186.180.26'表'
您是否已经从CLI(或PHP以外的其他某个sql客户端)进行测试,以确保您的脚本可以访问?
您可能需要登录到数据库才能访问您的脚本正在运行的用户,或者检查您在脚本中使用的凭据对于服务器环境中的数据库是否准确。
我有同样的问题,代码工作在开发服务器,但不是在prod服务器,其他脚本工作在同一张表。 我错过了纠正dev和prod环境之间的数据库表前缀。 (数据库的名称不一样)^^
链接地址: http://www.djcxy.com/p/69565.html上一篇: Syntax error or access violation using PDO
下一篇: how to display double quote instead of &34; from php variable