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 に答える