1

シンプルなmysqlテーブルがありますここに画像の説明を入力

これは、データベースに接続して testtable に挿入するコードです。

$mysqli = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
} else {
    $sql = "INSERT INTO testtable
     VALUES (NULL, $forename)";

    $res = mysqli_query($mysqli, $sql);

    if($res === TRUE) {
        echo "data successfully inserted.";
    } else {
        printf("Could not insert data: %s\n", mysqli_error($mysqli));
    }

    mysqli_close($mysqli);
}

この場合$forename、テーブルに挿入しようとします。'Jim'またはのような文字列リテラルを使用すると、'123'挿入されます。値またはその他の数値$forenameを指定すると、挿入されます。テーブルに列を指定しているかのように、 列がないというエラーが表示された123場合。$forename = 'Jim''Jim'

4

4 に答える 4

1

forename が 'Jim' の場合、クエリは ".... VALUES(NULL, Jim)" に展開されますが、"... VALUES(NULL, 'Jim')" が必要です。クエリは "...VALUES(NULL, 'Jim')" となるはずです。

于 2012-10-28T21:21:04.960 に答える
1

以前に私に起こったことですが、クエリに引用符がありません。試す:

$sql = "INSERT INTO testtable VALUES ('{$forename}')";
于 2012-10-28T21:22:25.047 に答える
1

準備済みステートメントを使用する

$db= mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

 $sql = "INSERT INTO testtable (testfield)  VALUES (?)";

        if ($statement =$db->prepare($sql)){

        $statement->bind_param("s",$forename);
        msqi_stmt_execute($statement);
        };
于 2012-10-28T21:18:08.033 に答える
0

フィールドは自動付番であるためid、何も挿入する必要はありません。また、挿入する列を指定する習慣を身に付ける必要があります。

それ以外の :

INSERT INTO testtable VALUES (NULL, $forename)

使用する:

INSERT INTO testtable 
(
    `testfield`
)
VALUES 
(
    '$forename'
)

フィールド名を囲む「引用符」は、一重引用符ではなくバックティックであることに注意してください。

もちろん、このような文字列挿入の使用はセキュリティ上のリスクがあるため、 case1352 が彼の回答で示しているように、本当に準備済みステートメントを使用する必要があります。

于 2012-10-28T21:18:00.880 に答える