【问题标题】:Can't INSERT into mysql via PDO无法通过 PDO 插入 mysql
【发布时间】: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;
?>

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 嗯...看起来不错。如果没有更多信息,我认为很难再调试这个......
  • 显示表定义...当不设置字段名称时,您必须使用正确的顺序和字段才能使查询工作。还要检查执行的返回错误。 (顺便说一句..它的常见做法是在-&gt; 之前/之后没有空格@
  • 尝试包装你的 bindValue 并在 try/catch 块中执行,看看是否有任何错误。
  • 您是否尝试在INSERT INTO transactions 之后附加要插入的字段名称,例如INSERT INTO transactions (account, date...) VALUES ...
  • @Samsquanch 如果有例外,即使没有try..catch,他也会非常清楚。事实上,他应该摆脱他拥有的try..catch 块。

标签: php mysql web pdo


【解决方案1】:

改为:

$sql = $con -> prepare("INSERT INTO transactions VALUES (:account, :date, :counterparty, :category, :debit, :credit)");

试试这个方法:

$sql = $con -> prepare("INSERT INTO transactions (ACCOUNT,DATE,COUNTERPARTY, CATEGORY,DEBIT,CREDIT) VALUES (:account, :date, :counterparty, :category, :debit, :credit)" );

检查事项:

1) 检查表定义中的确切字段名。

2) 检查表中声明的数据类型。 (在您的代码中,您尝试将字符串插入所有字段)

3) 使用 Try, Catch 块

 try 
{
// Your code
}
catch (PDOException $pe)
{
    $con->rollBack();

    die($pe->getMessage());
} 

【讨论】:

    【解决方案2】:

    我在帖子的 cmets 中回答了这个问题,但我会将其作为答案发布,以便更明显:

    现在代码可以工作了,我在 JS 中添加了这个: xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) {}} 试图查看发生了什么 try-catch 块,突然代码开始工作。我不是 确定我明白为什么这突然解决了问题?有人可以 小心解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      相关资源
      最近更新 更多