1

我有一个简单的 mysql 表在此处输入图像描述

这是连接数据库并插入测试表的代码:

$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

使用准备好的语句

$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 回答
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 回答
0

由于您的id字段是自动编号,因此您无需插入任何内容。您还应该真正养成指定要插入的列的习惯:

代替 :

INSERT INTO testtable VALUES (NULL, $forename)

采用:

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

请注意,字段名称周围的“引号”是反引号,而不是单引号。

当然,像这样使用字符串插入是一种安全风险,所以你真的应该使用准备好的语句,正如 case1352 在他的回答中所展示的那样。

于 2012-10-28T21:18:00.880 回答