找不到表(SQLSTATE [HY000]:一般错误:1没有这样的表:用户)

时间:2014-01-16 18:45:12

标签: php sqlite pdo

我正在尝试插入表中,但却无法找到表用户。我在标题中发布了错误。表格肯定存在:

enter image description here

这就是我的联系方式:

 define("DB_DSN", "sqlite2:host=hosthere;dbname=dbnamehere");
 define("DB_USERNAME", " ");
 define("DB_PASSWORD", " ");

 $con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
 $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $sql = "INSERT INTO users(username, password) VALUES(:username, :password)";

我正在使用一个免费的网站主机,所以我除了.htaccess之外我无法编辑。它有sqlite和sqlite2。我尝试使用sqlite:host ...但我仍然得到同样的错误。我还是PDO的新手,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您的连接字符串似乎不正确。

没有用于连接SQLite数据库的“host”和“dbname”变量。 SQLite数据库是一个文件,打开SQLite数据库所需的只是该文件的文件路径。

连接字符串由数据库类型(在您的情况下为sqlite2)组成,后跟冒号(:),后跟数据库的完整路径。

因此,例如,如果您的数据库名为“mydata.sqlite”,并且它位于“/ home / users / yayu / database”目录中,那么您的连接字符串将如下所示:

sqlite2:/home/users/yayu/database/mydata.sqlite

因此,要使用示例中提供的常量,可以使用以下命令:

define("DB_DSN", "sqlite2:/home/users/yayu/database/mydata.sqlite")
$con = new PDO(DB_DSN)

这就是连接所需的一切。每个SQLite数据库文件只有一个数据库(除非您明确地附加另一个数据库)。因此无需指定数据库名称。

有关更多信息,请参阅SQLite PDO驱动程序的PHP在线文档: http://us2.php.net/manual/en/ref.pdo-sqlite.php

我认为我要做的第一件事就是找出你的SQLite数据库文件的确切位置。看起来您正在使用基于Web的界面来管理SQLite数据库。尝试查看是否有某些设置或类似选项显示数据库的完整路径。 如果这没有帮助,请联系托管服务提供商并询问SQLite数据库文件的位置。

答案 1 :(得分:1)

要确保表位于特定数据库中,您可以使用MySQL SHOW TABLES列出表。 小心名字中的前导空格。

TRY

$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $db->query("SHOW TABLES FROM  yayu_zxq_users");
$tables = $stmt->fetchAll(PDO::FETCH_NUM);
print_r($tables);