【问题标题】:PDO give Mysql Error 1146PDO 给 Mysql 错误 1146
【发布时间】:2013-01-20 08:24:29
【问题描述】:
    $deleteID = $_POST['oz'];
    if(!$deleteID){
        echo '2';
        die;    
    } else {
        //It should be working.
    }
    $checkVar = $pdo->prepare("SELECT * FROM `user_posts` WHERE `id`=:delete");
    $checkVar->bindValue(':delete',$deleteID,PDO::PARAM_STR);
    if($checkVar->execute() == false){
        echo '2';
        die;
    }

我真的很生气。提供了 $deleteID,没有绑定任何内容。为什么不呢,请有人帮忙。

【问题讨论】:

  • 好的,$deleteID is supplied,$my_id 呢?
  • 是的,在 server.php 中提供。我包含了特定数量的代码。我在这个线程中删除了大量代码,只包含了主要内容。
  • 究竟出了什么问题?您收到错误消息吗?错误是什么?
  • 到底发生了什么?没有结果?数据错误?查询中的错误?你检查过错误吗?您是否打开了数据库中的查询日志并检查了正在执行的查询?您被激怒并不是帮助我们解决问题的问题描述。
  • @Jake 也可以echos 2 当$deleteID 为空或用户不是管理员时(根据您之前的较长代码示例)。你确定它甚至达到了 SQL 吗?

标签: php mysql pdo mysql-error-1146


【解决方案1】:
  1. 使 PDO 出错时抛出异常,
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    连接后。
  2. 确保您可以在日志或屏幕上看到发生的错误。
  3. 运行您在此处发布的代码不是其他代码。与其他代码一样,可能存在其他错误,与您的绑定问题无关。

对于Table doesn't exist 问题,您必须检查诸如拼写错误、字母大小写、连接错误的服务器、错误的 PHP 文件编辑等错误。比如说,您正在针对 localhost 运行 PHPMyAdmin,而针对远程主机或类似的实际脚本种。

【讨论】:

  • 致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[42S02]:未找到基表或视图:1146 表 'web-xpherio_db2.user_posts' 在 /home/blah 中不存在' -> 但是。该表确实存在:i.imgur.com/nC1S78e.png
  • @Jake 您在 PHP 代码中使用的用户帐户是否有权修改该表?
  • 是的。有一个用户帐户。而且它也是管理员,所以在检查之后它会说“这个用户是管理员吗?”如果是,则该检查无效并继续执行脚本。
【解决方案2】:

如果它说该表不存在,则该表不存在。

您要么连接到错误的服务器,要么选择了错误的数据库,要么遇到了案例问题。

http://dev.mysql.com/doc/refman/5.5/en/identifier-case-sensitivity.html

[..] 因此,底层操作系统的大小写敏感性在数据库、表和触发器名称的大小写敏感性中起作用。这意味着此类名称在 Windows 中不区分大小写,但在大多数 Unix 中都区分大小写。

确保您正在连接到您当前正在查看的同一数据库和服务器

print_r( $pdo );

这不是授权问题。

还有一个建议。如果你生气了,休息一下,喝杯茶,冷静下来,然后阅读“你的常识”的优秀答案并再次查看你的代码:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多