【问题标题】:PHP - MySQLi INSERT not workingPHP - MySQLi INSERT 不工作
【发布时间】:2016-02-07 07:44:09
【问题描述】:

我必须向 MySQL 数据库发送一个 INSERT 查询,假设所有变量都设置正确,我正在使用此代码:

 $check_alrd_sent = $mysqli -> query("SELECT * FROM reviews WHERE id_prod =" . $id_prod . " AND id_user = " . $current_usr . " LIMIT 1");
$check = mysqli_fetch_all($check_alrd_sent);

if ($check != NULL) {
    $check_err = 1;
} else {
    $ins_rev = $mysqli -> query("INSERT INTO `reviews` (`ID` ,`ID_prod` ,`ID_user` ,`review` ,`stars`) VALUES (NULL , " . $id_prod .",  " . $current_usr . ", " . $review . ",  " . $rating . ");");
    $ins_result = 1;
}
mysqli_free_result($check_alrd_sent);

$ins_result 变量已正确设置为结果,正如我使用 var_dump() 所见,但现在行已插入数据库中。

奇怪的是,如果我调用MySQL错误日志可以清楚地看到插入正确发送到数据库为:

42 Query     INSERT INTO `reviews` (`ID` ,`ID_prod` ,`ID_user` ,`review` ,`stars`) VALUES (NULL , 11,  1, asd,  4)

但它没有出现在表格中。

有什么建议吗?谢谢

【问题讨论】:

  • 首先 - 将所有字符字段值用引号括起来,SELECT 是否总是返回 NULL?我看不到打开mysql连接的代码,可能是你没有正确选择数据库?
  • @Wizard 我正在使用$mysqli = new mysqli ($DBHost, $DBUser, $DBPass, $DBName) or die("Could not connect: " . mysql_error());,所有变量都已正确设置。我正在使用 PHPmyAdmin,生成的 SELECT 显示一个空表。我试图追加`dbname,reviews`但没有任何改变

标签: php mysql mysqli sql-insert


【解决方案1】:

您的 INSERT 语句中有两个问题:

  1. 评论列的值是一个字符串,因此您需要在评论 VALUE 周围使用引号。
  2. 我认为 ID 是一个 AUTO INCREMENT NOT NULL 字段。所以不需要在 INSERT Query 中使用。

修改后的查询:

INSERT INTO `reviews` 
( `ID_prod`, `ID_user` ,`review` ,`stars`) 
VALUES (11, 1, "asd", 4)

【讨论】:

  • 我说丢掉所有疯狂的反引号和单引号。您还看到了为什么参数使用的查询如此受欢迎。
  • 确保你使用反引号而不是引号'reviews'应该是reviews@andreaem
  • 你是对的,ID是自动递增的,想知道使用null是正确的,反正根据mysql错误日志输出是92 Query INSERT INTO 'reviews' ('ID_prod' ,'ID_user' ,'review' ,'stars') VALUES (11, 1, 'asd', 4),插入不会完成,并且在表格中看不到任何内容
  • @andreaem 在 phpmyadmin 中手动运行此查询 INSERT INTO 'reviews' ('ID_prod' ,'ID_user' ,'review' ,'stars') VALUES (11, 1, 'asd', 4)
  • @andreaem 在代码中使用它----- $ins_rev = $mysqli -> query("INSERT INTO reviews (ID_prod ,ID_user ,review ,stars ) VALUES ('".$id_prod."','".$current_usr."','".$review."','".$rating."');");
【解决方案2】:

varchar 字段必须在 2 个配额中,因此 review 字段必须在 2 个 ' 中:

$ins_rev = $mysqli -> query("INSERT INTO `reviews` (`ID` ,`ID_prod` ,`ID_user`
,`review` ,`stars`) VALUES (NULL , '" . $id_prod ."', ' " . $current_usr . "', '" .
$review . "',  '" . $rating . "');");

【讨论】:

    【解决方案3】:

    在您的输出中,“asd”不在单引号中。那将是无效的 SQL。还应该考虑转换为不推荐使用的 SQL 函数,例如 PDO。

    【讨论】:

    • 谢谢我做了修改,但结果是一样的,还没有插入,错误日志说52 Query INSERT INTO 'reviews' (ID`,ID_prod,ID_user,review,stars ) VALUES (NULL , 11, 1, 'asd', 2)` 所以应该是正确的
    • 在 (ID - 这是无效的。
    • 抱歉,这是因为 Stackoverflow 在代码字符串中转换 `,是粘贴错误
    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2016-08-15
    相关资源
    最近更新 更多