当所有列名称100%正确时插入查询不插入

时间:2013-02-01 04:18:20

标签: php pdo

$UniqueID = rand(5400, 40000);
$InsertQuery = $c->prepare("INSERT INTO dbo.Users_Master ( 
UserUID, UserID, Pw, JoinDate, Admin, AdminLevel, UseQueue, Status, Leave, UserType, Point)
VALUES (:UserUID, :UserID, :Pw, :Date, :Admin, :AdminLevel, :UseQue, :Status, :Leave, :UserType, :Point)");
$Param = array ($UniqueID, $_POST['Username'], $_POST['Password'], '2013-21-10', 'False', '0', 'False', '0', '0', 'P', '0');
$InsertQuery->execute($Param);

您好。我上面的代码确实有我的数据库的正确列名/表名,但我的插入不起作用?谁能明白为什么?


我已经过了10次这样的查询,试图发现错误,但我不能尝试。我试图用传统方式绑定params:

$InsertQuery->bindParam(':UserUID', $UniqueID, PDO::PARAM_INT);
$InsertQuery->bindParam(':UserID', $_POST['Username'], PDO::PARAM_STR);
$InsertQuery->bindParam(':Pw', $_POST['Password'], PDO::PARAM_STR);
$InsertQuery->bindParam(':Date', '2013-21-10', PDO::PARAM_STR);
$InsertQuery->bindParam(':Admin', 'False', PDO::PARAM_STR);
$InsertQuery->bindParam(':AdminLevel', '0', PDO::PARAM_INT);
$InsertQuery->bindParam(':UseQue', '0', PDO::PARAM_INT);
$InsertQuery->bindParam(':Status', '0', PDO::PARAM_INT);
$InsertQuery->bindParam(':Leave', '0', PDO::PARAM_INT);
$InsertQuery->bindParam(':UserType', 'P', PDO::PARAM_STR);
$InsertQuery->bindParam(':Point', '0', PDO::PARAM_INT);

这也证明没有运气。

1 个答案:

答案 0 :(得分:1)

“试图发现错误”是非常无效的发现错误的方法 程序员必须要求他们的程序这样做。

如果出现PDO问题,必须告诉PDO引发错误错误:

$c->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

必须在连接后立即设置,或者甚至更好 - 作为连接选项 它将重述你在数据库中发生的任何错误 - 所以,你会知道,出了什么问题。

您的代码也存在一些问题

  1. 永远不要将随机数称为唯一。将此字段设为auto_increment PRIMARY KEY,让数据库保持唯一性。
  2. 不要绑定常量。那太无聊了。
  3. 缩短您的代码。但合理地说:长线不会缩短你的代码
  4. 所以

    $sql = "INSERT INTO Users_Master VALUES (NULL,?,?,curdate(),'False',0,0,0,0,'P',0)";
    $stmt = $c->prepare($sql);
    $stmt->execute(array($_POST['Username'], $_POST['Password']));