【问题标题】:Can't add rows in SQLite3 with PHP, no error message displayed无法使用 PHP 在 SQLite3 中添加行,不显示错误消息
【发布时间】:2014-07-24 09:31:12
【问题描述】:

我正在使用 PHP 5.3.19 和 SQLite3,我似乎无法使用 PHP 向我的表中添加任何行,而且我也没有收到任何错误消息。我确实设法进行了选择,但 INSERTS 不起作用。

代码:

try  {  
  $dbh = new PDO("sqlite:database.db");
  $dbh->exec("INSERT INTO TABLE_NAME (COL1, COL2, COL3) VALUES (null, $var1, $var2)");      
  echo "Row added";
}
catch(PDOException $e) {
  echo $e->getMessage();
  echo "<br><br>Database <b>NOT</b> loaded successfully. ";
  die( "<br><br>Query Closed! $error");
}   

这会在没有任何错误消息的情况下执行,但不会保存条目。

目录归webservd所有,webservd可写,所以我真的不知道问题出在哪里。当我通过 CLI 运行 PHP 脚本时,它也不执行任何操作,但是如果我尝试手动输入行,它确实可以工作。

我查看了其他关于 PHP 和 SQLite3 的帖子,尤其是 Unable to write to a chmod 777 database file on SQlite3 via php 5.3.0 ,但找不到答案。

我错过了什么吗?

提前感谢您的帮助

【问题讨论】:

  • 为什么不将PDO设置为异常模式,并在插入失败时捕获异常?此外, exec() 返回受影响的行数。你为什么不检查那个号码?捕捉异常会告诉你哪里出错了。正如 CodeSlayer 在他的回答中提到的那样 - 你没有引用插入的值。
  • 我将它置于异常模式,但它不会抛出任何东西。
  • 您发布的代码不是您在异常模式下设置 PDO 的方式。您现在遇到的另一个问题是您很容易受到 SQL 注入的影响。你接受这些变量作为用户输入还是什么?
  • 我将它们作为变量传递给函数。值得到正确传递。为什么我容易发生 SQL 注入?
  • 因为这些值没有被清理。这就是我们使用 PDO 的预处理语句并将值绑定到占位符的原因。然后 PDO 根据正在使用的数据库引擎/字符集为我们清理值。

标签: php sqlite php-5.3 sql-insert


【解决方案1】:

我想你错过了什么;如果你的 col2 和 col3 是一个字符串,它应该看起来像:

$dbh-&gt;exec("INSERT INTO TABLE_NAME (COL1, COL2, COL3) VALUES (null, '$var1', '$var2')");

【讨论】:

  • 是的,它们都是字符串(字符和 varchar)。将变量放在''中,但它没有改变任何东西。
  • 当我在 CLI 中运行它时,它不起作用,但使用网页时,它可以!非常感谢
【解决方案2】:

别忘了你的目录和你的数据库都需要写权限,最好是在 Unix 或 Linux 中使用 sqlite。啊……

【讨论】:

  • 盗版帮我,我设置了文件的权限,但没有目录
【解决方案3】:

在查询[示例:$query = $db-&gt;query("INSERT INTO table (column1, column2...) VALUES ('$value1','$value2'...)")] 后添加子句“OR DIE”,函数最后一个错误代码为 sqlite3 [示例:$db-&gt; LastErrorCode());]。这样你就可以得到错误代码(如果存在)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多