【发布时间】:2014-08-13 21:00:38
【问题描述】:
在过去一天左右的时间里,我一直在努力反对这个 PHP 插入代码。我似乎找不到问题,并且在 2 次完整的代码重做后仍然存在。问题很简单,它不会插入任何东西,而且我通过简单地直接输入变量的值而不是使用 GET 通过 JS 从 HTML 中获取它们来减少可能性。也许这里有人可以发现发生了什么。我知道 PDO 肯定是有效的,因为我能够从 mysql 表中获取信息。
<?php
$tbl = 'transactions';
$acc = 'blah1';
$date = '2014-07-01';
$cp = 'counterparty';
$ctg = 'category';
$dbt = 1.00;
$crd = 0.00;
$user = "root";
$pass = #######; // Note: the password is actually in the file on my side.
try {
$con = new PDO("mysql:host=localhost;dbname=budget;charset=utf8",$user,$pass);
$con -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$sql = $con -> prepare("INSERT INTO transactions VALUES (:account, :date, :counterparty, :category, :debit, :credit)");
$sql -> bindValue(':account', $acc, PDO::PARAM_STR);
$sql -> bindValue(':date', $date, PDO::PARAM_STR);
$sql -> bindValue(':counterparty', $cp, PDO::PARAM_STR);
$sql -> bindValue(':category', $ctg, PDO::PARAM_STR);
$sql -> bindValue(':debit', strval($dbt), PDO::PARAM_STR);
$sql -> bindValue(':credit', strval($crd), PDO::PARAM_STR);
$sql -> execute();
$dbh = NULL;
?>
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
嗯...看起来不错。如果没有更多信息,我认为很难再调试这个......
-
显示表定义...当不设置字段名称时,您必须使用正确的顺序和字段才能使查询工作。还要检查执行的返回错误。 (顺便说一句..它的常见做法是在
->之前/之后没有空格@ -
尝试包装你的 bindValue 并在 try/catch 块中执行,看看是否有任何错误。
-
您是否尝试在
INSERT INTO transactions之后附加要插入的字段名称,例如INSERT INTO transactions (account, date...) VALUES ...? -
@Samsquanch 如果有例外,即使没有
try..catch,他也会非常清楚。事实上,他应该摆脱他拥有的try..catch块。