2014-11-06 100 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