2016-09-07 71 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);