【问题标题】:PHP/MySQL Cannot INSERT INTOPHP/MySQL 无法插入
【发布时间】:2014-11-06 13:16:33
【问题描述】:

我遇到了一个非常奇怪的问题,有一个我以前从未见过的错误。

这是我的代码:

<?php
funcion addPref($nome, $uid, $valore){
   $SQL = "INSERT INTO preferenze_utenti (idPreferenza, idUtente, value) 
   VALUES ((SELECT id FROM preferenze WHERE nome = ?), ?, ?)";
   $stmt = $GLOBALS["db"]->prepare($SQL);
   $stmt->bind_param('sis', $nome, $uid, $valore);
   return $stmt->execute() ? true : false;
}
?>

我正在使用这样的功能:

addPref("css_animations", 530, "true");

注意"true"是一个字符串,因为这个表接受多种类型的数据,所以我就是这样使用的。

问题在于,实际上该函数总是返回 true,而我没有得到新的数据库记录。 我试过直接在 PHPMyAdmin 中运行查询并且运行良好。 我注意到我从 MySQL 收到了这个警告:

截断不正确的 DOUBLE 值:'css_animations'

我哪里出错了?

表格:

CREATE TABLE IF NOT EXISTS `preferenze_utenti` (
  `idPreferenza` bigint(20) NOT NULL,
  `idUtente` bigint(20) NOT NULL,
  `value` varchar(256) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `preferenze` (
`id` bigint(20) NOT NULL,
  `nome` char(64) NOT NULL,
  `def` varchar(128) NOT NULL COMMENT 'Valore default'
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

【问题讨论】:

  • 请向我们展示您的表格结构。
  • preferenze_utenti 的表定义是什么?
  • preferenze 中的列nome 是什么类型?
  • @u_mulder 是一个字符串。
  • 我已经添加了两个表的 sql 导出。

标签: php mysql sql-insert


【解决方案1】:

当您使用SELECT 时,请勿使用VALUES,如下所示:

$SQL = "INSERT INTO preferenze_utenti (idPreferenza, idUtente, value)
        VALUES ((SELECT id FROM preferenze WHERE nome = ?), ?, ?)";

改成:

$SQL = "INSERT INTO preferenze_utenti (idPreferenza, idUtente, value)
       ((SELECT id FROM preferenze WHERE nome = ?), ?, ?)";

【讨论】:

  • 成功了!我刚刚使用这个查询重写了代码并且确实有效。使用 VALUES 与不使用有什么区别?
  • @DarioEmerson 这是一个 MySQL 语法标准,如果要插入的数据需要通过 SELECT 语句获取,我们绝不能使用 VALUES。
  • 不知道,一直在用,从来没有遇到过问题。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-05-30
  • 2011-08-04
  • 2020-07-18
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多