gpt4 book ai didi

php - PDO 和 SQLite3 中准备好的查询有区别吗?

转载 作者:行者123 更新时间:2023-12-03 00:56:12 25 4
gpt4 key购买 nike

我一整天都在为此抓狂。我在 Windows 和 Linux 上看到了相同的行为。

此站点和其他站点上的简单示例完美地演示了参数化查询如何与 SQLite 配合使用(使用 SQLite3 类)。然而,使用 PDO 类时,相同的示例不起作用 - 它们返回零行。我找不到任何理由。

这是我的测试 PHP 脚本,它有效地执行了两次相同的操作 - 一次通过 SQLite3 连接,然后使用 PDO。第一个返回插入的行,第二个则不返回,尽管插入的行存在于数据库中。我做错了什么?

<?php
echo "connecting via SQLite3<BR>";

unlink('mysqlitedb.db');
$db = new SQLite3('mysqlitedb.db');

$db->exec('CREATE TABLE foo (id INTEGER, bar STRING)');
$db->exec("INSERT INTO foo (id, bar) VALUES (1, 'This is a test')");

$stmt = $db->prepare('SELECT bar FROM foo WHERE id=:id');
$stmt->bindValue(':id', 1, SQLITE3_INTEGER);

$result = $stmt->execute();
var_dump($result->fetchArray());

echo "<P>Connecting via PDO<BR>";

unlink('mysqlitepdo.db');
$db = new PDO('sqlite:mysqlitepdo.db');

$db->exec('CREATE TABLE foo (id INTEGER, bar STRING)');
$db->exec("INSERT INTO foo (id, bar) VALUES (1, 'This is a test')");

$stmt = $db->prepare('SELECT bar FROM foo WHERE id=:id');
$stmt->bindValue(':id', 1, SQLITE3_INTEGER);

$result = $stmt->execute();
var_dump($result->fetchArray());

?>

执行此脚本时,它返回:

connecting via SQLite3
array(2) { [0]=> string(14) "This is a test" ["bar"]=> string(14) "This is a test" }
Connecting via PDO

Fatal error: Call to a member function fetchArray() on a non-object in D:\docs\LRRSA\LRRSA_site\MCC\foobar.php on line 28

我认为 fatal error 是因为 varDump 没有返回任何行而引起的。

我确信这是显而易见的事情,但如果是这样的话,对我来说就太明显了:-)

最佳答案

这些库(SQLite 与 PDO)在语义上几乎相同,但在本质上存在一些差异。

例如,对于 PDO,PDOStatement returns either false or trueexecute() 方法而不是结果集。所以当你这样做时:

$result->fetchArray();

你基本上在做:

true->fetchArray();

这当然不是一个有效的方法(因为 true 没有任何方法,是一个 bool 值)。您可以使用 fetchAll() 从执行的 PDO 语句中获取结果。语句本身的方法:

$stmt->fetchAll();

关于php - PDO 和 SQLite3 中准备好的查询有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34525508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com