2014-11-06 57 views
0

我遇到了一个很奇怪的问题,我从来没有见过这样的错误。PHP/MySQL无法插入

这是我的代码:

<?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,并且我没有得到新的db记录。 我试着直接在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; 
+0

向我们展示你的,你的表结构PLS 。 – vaso123 2014-11-06 13:19:21

+0

什么是preferenze_utenti的表定义? – tjati 2014-11-06 13:19:27

+0

'preferenze'中的列'nome'是什么类型? – 2014-11-06 13:24:29

回答

1

不要使用VALUES当您使用SELECT作为这里:

$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 = ?), ?, ?)"; 
+0

它的工作!我刚刚使用这个查询重写了代码,并且实际工作。 使用VALUES与否有什么区别? – 2014-11-06 13:29:03

+0

@DarioEmerson它是一种MySQL语法标准,如果要插入的数据需要由SELECT语句读取,我们绝不能使用VALUES。 – 2014-11-06 13:30:36

+0

不知道,总是使用,从来没有问题。 感谢您的帮助! – 2014-11-06 13:33:44