2016-09-07 66 views
0

我使用php implode將從輸入字段數組中提取的值插入到數據庫表列中。這對我很好:使用implode向數據庫表列中插入值

$insert_row =mysql_query("INSERT INTO ActivityProduct (Ideal) VALUES (" . implode('),(', $_POST["ideal"]) . ")"); 

我想現在插入值,從兩個不同的輸入字段數組獲取到兩個數據庫表列。下面的代碼產生和錯誤:

$insert_row =mysql_query("INSERT INTO ActivityProduct (AID,Ideal) VALUES (" . implode('),(', $_POST["act"]) . " ," . implode('),(', $_POST["ideal"]) . ")"); 

我想表達兩個陣列,在插入語句,如,例如:(10,21),(20,31),(30,41)而不是(10),(21),(20),(31),(30),(41)

任何想法如何去了解這一點,高度讚賞。

+0

它會產生什麼錯誤? $ _POST的內容是什麼?如圖所示,您很容易在您的查詢中直接使用提交的值進行SQL注入。 – Dave

+0

它引發了錯誤:列計數與第1行的值計數不匹配 – Kenn

回答

0

這樣使用它可以幫助你

$ideal=implode('),(', $_POST["ideal"]); 
$act=implode('),(', $_POST["act"]); 

$insert_row =mysql_query("INSERT INTO ActivityProduct (Ideal) VALUES (" .mysql_real_escape_string($ideal). ")"); 
$insert_row =mysql_query("INSERT INTO ActivityProduct (AID,Ideal) VALUES (" .mysql_real_escape_string($ideal). " ," .mysql_real_escape_string($act). ")"); 

,並嘗試使用mysqli insted的的mysql

mysqli

$insert_row = mysqli->prepare("INSERT INTO ActivityProduct (Ideal) VALUES ($ideal)"); 
$insert_row =mysql_query("INSERT INTO ActivityProduct (AID,Ideal) VALUES ($ideal,$act)"); 
0

與您的查詢替換此查詢的工作你

$insert_row =mysql_query("INSERT INTO ActivityProduct (AID,Ideal) VALUES ('". implode('),(', $_POST["act"]). "' ,'" .implode('),(', $_POST["act"])."')"); 
+0

它工作,但只存儲一行記錄,而不是許多行記錄。根據你的代碼,當我回顯兩個數組時, $ Ideal = implode('),(',$ _POST [「ideal」]); $ act = implode('),(',$ _POST [「act」]); ECHO「'$ Ideal,$ act'」; (1),(1),(1),(1),(1,19),(18),(17),(16),(15),(14) 注意://只有(1,19)存儲在 – Kenn

+0

沒有得到你...請編輯你的問題與你得到什麼,你想要什麼。謝謝@Kenn –

0

請注意,請求mysql_query擴展是PHP 5.5.0過時,它是在PHP 7.0移除0.0。相反,應該使用MySQLiPDO_MySQL擴展名。

由於已經給出了MySQLi示例,請考慮是否要使用PDO。

// Build the parameter list 
$sql = array(); $params = array(); 
for ($i=0; isset($_POST['ideal'][$i])&&isset($_POST['act'][$i]); $i++) { 
    $sql[] = ":act_{$i}, :ideal_{$i}"; 

    $params["ideal_{$i}"] = $_POST['ideal'][$i]; 
    $params["act_{$i}"] = $_POST['act'][$i]; 
} 

// Then run the query safely using PDO 
$dbh = new PDO('mysql:host=localhost;dbname=test', "user", "pass"); 
$stmt = $dbh->prepare("INSERT INTO ActivityProduct (AID, Ideal) VALUES (".implode("), (", $sql).")"); 
$result = $stmt->execute($params);