【问题标题】:Fatal error: Uncaught PDOException ("SQLSTATE[42S02]")致命错误:未捕获的 PDOException ("SQLSTATE[42S02]")
【发布时间】:2017-06-12 21:21:40
【问题描述】:

尝试删除项目时出现以下错误。

致命错误:未捕获的 PDOException:SQLSTATE[42S02]:基表或 未找到视图:1146 表 'databaseName.tableName' 不存在 /storage/h1/735/500735/public_html/delete.php:21 堆栈跟踪:#0 /storage/h1/735/500735/public_html/delete.php(21): PDOStatement->execute() #1 {main} 抛出 /storage/h1/735/500735/public_html/delete.php 在第 21 行

注意:tableName 这里是tblcart

文件删除.php

<?php
    session_start();
    require("dbconfig.php");
    if (isset($_GET['delete_id'])) {
        $stmt_select = $DB_con->prepare('SELECT * FROM tblcart WHERE productID =:id');
        $stmt_select->execute(array(':id'=>$_GET['delete_id']));
        $result=$stmt_select->fetch(PDO::FETCH_ASSOC);

        $stmt_delete = $DB_con->prepare('DELETE FROM tblCart WHERE productID =:id AND userID =:userID');
        $stmt_delete->bindParam(':id', $_GET['delete_id']);
        $stmt_delete->bindParam(':userID', $_SESSION['userid']);
        $stmt_delete->execute();

        header("Location: cart.php");
    }
?>

请参阅错误说明。错误发生在$stmt_delete-&gt;execute(); 行。如果我通过本地 PC localhost 运行代码,它运行良好,但在 Web 托管服务器上运行时,我收到此错误。

文件 dbconfig.php

<?php
    $DB_HOST = 'localhost';
    $DB_USER = 'root';
    $DB_PASS = 'password';
    $DB_NAME = 'databaseName';

    try{
        $DB_con = new PDO("mysql:host={$DB_HOST};dbname={$DB_NAME}",$DB_USER,$DB_PASS);
        $DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e){
        echo $e->getMessage();
    }
?>

【问题讨论】:

  • Table 'databaseName.tableName' doesn't exist 什么不清楚?
  • 看看dbconfig.php中的代码可能会有用
  • 注意:如果您需要 productIDuserID 以使删除唯一,那么您可能还需要 userIDSELECT 中,否则您可能会选择多行通过 SELECT 并删除随机行
  • 我假设您可以在代码中的某处找到tableName,因为它是错误中缺少的表格,而您显示的代码仅参考tblcart。也许你应该从修复它开始。
  • @fpietka tableName 指的是tblcart。所以错误说明应该是databaseName.tblcart,但我故意将databaseName.tblcart替换为databaseName.tableName

标签: php mysql pdo


【解决方案1】:

Linux 服务器上的数据库和表名区分大小写。

Windows 服务器上的数据库和表名区分大小写。

这就是为什么它可以在您的计算机 (Windows) 上运行而不是在网络托管服务器 (Linux) 上运行的原因

将删除语句更改为:

$stmt_delete = $DB_con->prepare('DELETE FROM tblCart WHERE productID =:id AND userID =:userID');

收件人:

$stmt_delete = $DB_con->prepare('DELETE FROM tblcart WHERE productID =:id AND userID =:userID');

区别是tblCarttblcart

引用是here

【讨论】:

  • 直到你提到它,我才意识到这一点。非常感谢!
猜你喜欢
  • 2023-02-02
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多