0
$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 次,试图找出错误,但我无法尝试。我尝试以传统方式绑定参数:

$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);

这也证明不走运。

4

1 回答 1

1

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

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

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

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

您的代码也存在一些问题

  1. 永远不要将随机数称为唯一数。改为使用此字段 auto_increment PRIMARY KEY 并让数据库为您保持唯一性。
  2. 不要绑定常量。这很无聊。
  3. 缩短你的代码。但合理:长行不会使您的代码更短

所以

$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']));
于 2013-02-01T04:25:36.250 回答