4

データベースに新しいレコードを挿入しようとすると問題が発生します。問題はビットフィールドにあると思います。値 True を割り当てると、次のエラーが発生します。

Failed: Array ( [0] => Array ( [0] => 22018 [SQLSTATE] => 22018 [1] 
=> 245 [code] => 245 [2] => [Microsoft][SQL Server Native Client 10.0]
[SQL Server]Conversion failed when converting the varchar value ' 1 ' 
to data type bit. [message] => [Microsoft][SQL Server Native Client 10.0]
[SQL Server]Conversion failed when converting the varchar value ' 1 ' to 
data type bit. ) )

しかし、それをfalseに変更すると機能します。私のコードの一部を示します。この変数に絞り込んだため、ほとんどを切り取りました。

$active = True;

これが私の挿入クエリです。

$sqlInsert = "INSERT INTO customers(
                customerID,
                registeredDate,
                givenName,
                familyName,
                email,
                password,
                phone,
                mobile,
                property,
                street,
                locality,
                town,
                area,
                postalCode,
                active
            ) 
            VALUES(" .
                $newUser . "," .
                $date . ", ' " .
                $given . " ', ' " .
                $family . " ', ' " .
                $email . " ', ' " .
                $pwd . " ', ' " .
                $phone . " ', ' " .
                $mob . " ', ' " .
                $property . " ', ' " .
                $street . " ', ' " .
                $locality . " ' , ' " .
                $town . " ', ' " .
                $area . " ', ' " .
                $postalcode . " ', ' " .
                $active . " ')";

$stmtInsert = sqlsrv_query($conn, $sqlInsert);
4

1 に答える 1

3

activeフィールドはbitデータ型であると想定しています。

customerid フィールドのように、アクティブなフィールドに渡される値を引用符で囲みません。

また、値true / false1 / 0に変換する必要があると思います。

変更されたコード: 周囲の一重引用符" . $active . "が削除されていることに注意してください。

$sqlInsert = "INSERT INTO customers(customerID, registeredDate, givenName,
                familyName,  email, password, 
                phone, mobile, property, 
                street, locality, town,  
                area, postalCode, active) 
              VALUES(" . $newUser . "," . $date . ", ' " . $given . " ', 
              ' " . $family . " ', ' " . $email . " ', ' " . $pwd . " ', 
              ' " . $phone . " ', ' " . $mob . " ', ' " . $property . " ', 
              ' " . $street . " ', ' " . $locality . " ' , ' " . $town . " ', 
              ' " . $area . " ', ' " . $postalcode . " ', " . $active . ")";
$stmtInsert = sqlsrv_query($conn, $sqlInsert);

False値で機能した理由がわかりません。INSERTすべての値を設定した後、ステートメントがどのように評価されるかを確認することをお勧めします。ステートメントを実行する代わりに、INSERT ステートメントを画面/ページに出力し、データベースに対して SQL Server Management Studio で手動で実行します。

于 2012-04-29T12:29:48.930 に答える