2013-01-23 38 views
0

我具有基於插入命令以下:插入數組返回不完整的數據(的MySQL/PHP)

$baseINS = "INSERT INTO table2 (Points_ID, StaticCode) VALUES "; 
$arrayINS = explode(", ", $arraystring); 
foreach ($arrayINS as &$array1INS) { 
    $array1INS = "('" . $array1INS . "', '123456')"; 
} 
$arrayvaluesINS = implode(', ', $arrayINS); 
$insertSQL2 = $baseINS . $arrayvaluesINS; 

$insertSQL2從以下事務查詢:

$insertSQL = "BEGIN"; 
mysql_query($insertSQL) or die (mysql_error()); 
$insertSQL = $insertSQL1; 
mysql_query($insertSQL) or die (mysql_error()); 
$insertSQL = $insertSQL2; 
mysql_query($insertSQL) or die (mysql_error()); 
$insertSQL = "COMMIT"; 
mysql_query($insertSQL) or die (mysql_error()); 

(其中$insertSQL1是另一個SQL插入,到另一個表)

表結構如下:

table2 ID INT(50)NOT NULL AUTO_INCREMENT,
StaticCode VARCHAR(100)NOT NULL, Points_ID VARCHAR(50)NOT NULL, PRIMARY KEY(ID) UNIQUE KEY IDID) ) ENGINE = InnoDB的

現在,讓我們說,例如該$insertSQL2回聲爲INSERT INTO table2 (Points_ID, StaticCode) VALUES ('24859', '123456'), ('24649', '123456'), ('25166', '123456')

我希望三行出現在表2 ...但是這是發生了什麼:

  • 無論是插入命令($insertSQL1$insertSQL2)呢,其實,插入數據。
  • 就是這樣,雖然$insertSQL1將所有表單中的所有數據插入到table1中的必填字段中,但是$insertSQL2(它插入數組)不會 - 它只是插入一次靜態代碼,然後離開Points_ID空白。

我已經僅僅複製呼應命令到PHPMySQL測試的INSERT語句,它不正是它應該是,讓我知道我的版本的MySQL可以處理它。

任何想法爲什麼?

+0

你需要證明你的表結構。例如是'Points_ID'外鍵字段?匹配的外部記錄是否存在?你的代碼也容易受到SQL注入攻擊,你使用的是一個非常危險的foreach()結構,而且你的實際查詢調用是不必要的冗長的。例如清理你的代碼,也許事情會開始工作。 –

+0

@MarcB - 這僅僅是目前的概念證明(因此代碼混亂)。表結構:''table2'( ' ID' int(50)NOT NULL AUTO_INCREMENT, 'StaticCode' varchar(100)NOT NULL, 'Points_ID' varchar(50)NOT NULL, PRIMARY KEY('ID') , UNIQUE KEY'ID'('ID') )ENGINE = InnoDB' – user1259798

回答

0

從你的代碼看起來你正在使用mysql擴展。你應該使用mysqli或者pdo_mysql。我相信交易不適用於MySQL。

的mysqli看起來幾乎一樣,但對於交易使用mysqli features

/* set autocommit to off */ 
$mysqli->autocommit(FALSE); 

/* Insert some values */ 
$mysqli->query($insertSQL); 

/* commit transaction */ 
$mysqli->commit(); 
+0

這是否解釋了爲什麼它執行大部分INSERT INTO命令,但不是全部?它肯定會工作或不工作?我得到的是一些信息被插入,並且一些信息沒有被插入。(我同意我可能會將其升級到mysqli,但也只是想讓我的頭腦解決實際問題!):-) – user1259798

+0

我在說的是,在這種情況下,「BEGIN」和「COMMIT」沒有效果,所以是的,可以插入一些信息,但不是全部,如果有任何問題。 –