我从js调用(ajax)将数组传递到php页面并抛出错误。错误所在的代码行是:
foreach ($array as list($a, $b, $c, $d, $e, $f, $g, $h)) {
这是我第一次尝试pdo。
任何人都可以看到代码有什么问题吗?
js& ajax电话:
var outerarray=[];
var innerarray = [];
innerarray[0]="1";
innerarray[1]="2";
innerarray[2]="3";
innerarray[3]="4";
innerarray[4]="5";
innerarray[5]="6";
innerarray[6]="7";
innerarray[7]="8";
innerarray[8]="9";
innerarray[9]="10";
innerarray[10]="11";
innerarray[11]="1";
innerarray[12]="13";
outerarray[0]=innerarray;
$.ajax({
type: "POST",
url: "ajax/upadateElements.php",
data: {outerarray:outerarray},
success:function(data){
alert("data:"+data);
},
error: function(data){
alert("failure");
}
});
updateElements.php代码
$db = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', username, password, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$array[]=$_POST['outerarray'];
foreach ($array as list($a, $b, $c, $d, $e, $f, $g, $h)) {
$stmt = $db->prepare("SELECT * FROM table WHERE a=:a AND b=:b");
$stmt->execute(array(':a' => $a, ':b' => $b));
$row_count = $stmt->rowCount();
if($row_count==0){
$stmt = $db->prepare("INSERT INTO table(a, b, c, d, e, f, g, h) VALUES(:field1,:field2,:field3,:field4,:field5,:field6,:field7,:field8)"); $stmt->execute(array(':field1' => $a, ':field2' => $b, ':field3' => $c, ':field4' => $d, ':field5' => $e, ':field6' => $f, ':field7' => $g, ':field8' => $h));
$affected_rows = $stmt->rowCount();
}
if($affected_rows !=0){
echo "success";
}else{
echo "fail";
}
答案 0 :(得分:0)
在您的SELECT
SQL语句中,您正在搜索pagebref
列,但在INSERT
语句中,您尝试使用相同的值填充列b
。检查列名称。
另外,只需使用PHP> = 5.5在list
内使用foreach
。对于旧版本,替代方案可以是:
foreach ($array as $data) {
list($a, $b, $c, $d, $e, $f, $g, $h) = $data;
...
答案 1 :(得分:0)
感谢@Edakos帮助我解决这个问题。问题是你不能在PHP< 5.5
中的foreach循环中使用list()我不知道为什么人们会拒绝这个问题。