当前位置: 首页 > 知识库问答 >
问题:

使用PDO的语法错误或访问违规

东深
2023-03-14

我正在在线迁移我的本地文件,并且我的db脚本存在PHP问题。本地工作正常(运行PHP5.3.8),但在我的服务器(PHP5.3.10)上出现以下错误

没有$DBH-

致命错误:调用一个成员函数setFetchMode()在一个非对象在/.../... php on line 108

用$DBH-

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实现。我怎样才能摆脱这个错误?我是不是以一种奇怪的方式准备/执行了这个声明,把事情搞砸了?谢谢任何帮助

共有3个答案

贾沛
2023-03-14

我也有同样的问题,代码在开发服务器工作,但在prod服务器工作,其他脚本与同一表工作。我错过了更正dev和prod环境之间的数据库表前缀。(数据库的名称不一样)^^

上官华池
2023-03-14

听起来像是服务器上的访问问题:

SQLSTATE[42000]:语法错误或访问冲突:1142 SELECT命令拒绝给用户“…”@205.186.180.26'表示“邀请”餐桌

您是否已经从CLI(或PHP之外的其他sql客户端)进行了测试,以确保您的脚本具有访问权限?

您可能需要登录数据库,以便向正在运行脚本的用户提供访问权限,或者检查您在脚本中使用的凭据对服务器环境中的数据库是否准确。

赏梓
2023-03-14

我也有同样的问题。在我将代码从本地上传到生产服务器之后,用户拥有所有权限。问题是数据库名称--在我的本地环境中,它类似于dattabase1,而在生产环境中,名称不同。。。前缀_ddatabas1。我将数据库的名称更改为正确的名称,一切正常。

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 由于在MySQL中使用保留字作为表或列名而导致的语法错误 (1个答案) 3年前关闭。 我已经浏览了所有其他StackOverflow(和Google)中相同问题的帖子,但似乎都没有解决我的问题。 我正在使用PDO和PHP。 我的代码: 而第一个print_r给 这是预期的(没有一个为空) 但它输出错误 SQLSTATE [42000]:语法错误或访问冲突

  • 问题内容: 我想在同一查询中使用WhereIn和Groupby来获取结果。 我已经试过了: 但是我得到了这个错误信息: SQLSTATE [42000]:语法错误或访问冲突:1055’sbrtpt.loading.id’不在GROUP BY中(SQL:从中选择从(14,15,16)组中的id按Vehicle_no进行加载) 问题答案: 简短答案 在-> 数组中 设置为全部禁用。 .... 要么 您

  • 本文向大家介绍Java中无法访问的语句错误,包括了Java中无法访问的语句错误的使用技巧和注意事项,需要的朋友参考一下 由于多种原因导致无法编译代码时,发生无法访问的代码错误,其中包括:无限循环,无法访问的代码行之前的return语句。 让我们看一个例子- 示例 输出结果 名为Demo的类包含主函数,并定义了一个值,并检查该值并运行空的“ for”循环。如果找到该值,则控件会跳出循环,否则将显示一

  • 是否有代码缺失/不正确? 谢谢

  • 问题内容: 我想用此查询执行的操作是:我有一个名为Dept的表,其中包含所有部门名称和ID,具有用户名,部门ID和ID的用户信息。我也有一个名为checkinout的第三个表,该表具有用户ID,并带有时间。 因此,我想(使用部门名称)将Checkinout表中的所有数据从属于该部门的人员那里获取,但是当我尝试该查询时,它给了我一个错误: 我无法解决。我正在使用Acces数据库。 非常感谢您的帮助。

  • 给出这段代码,其中包含一个类及其方法.这是我们的主要关注点: 在IntelliJ IDEA中运行此代码不会返回任何编译错误,但会成功返回输出。我的问题是:为什么这不是一个不可达的语句? 删除语句后运行循环(但保留如下所示: (...)会返回这样的错误,因为最后的< code>sout永远不会被打印出来。为什么第一种情况也不会出现这种情况?我确信这不是运行时的问题,因为编译器肯定看到整数< code