Вставить несколько записей строк, используя mysqli bind_param?

У меня есть код, который работает с использованием запроса MySQL.

$N = count($fullname);
for($i=0; $i < $N; $i++)
mysql_query("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES ('$fullname[$i]','$fage[$i]','$frel[$i]','$fcivil[$i]','$fedu[$i]','$foccup[$i]','$finco[$i]','$id')");

как преобразовать это в mysqli bind_param вот что я сделал:
(Я имею connection.php (mysqli))

$N = count($fullname);
for($i=0; $i < $N; $i++)
$stmt = $conn->prepare("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES (?,?,?,?,?,?,?,?)");
$stmt ->bind_param("ssssssss",$fullname[$i],$fage[$i],$frel[$i],$fcivil[$i],$fedu[$i],$foccup[$i],$finco[$i],$id);
}

но все еще не получаю данные.

0

Решение

С этим кодом:

$N = count($fullname);
for($i=0; $i < $N; $i++)
$stmt = $conn->prepare("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES (?,?,?,?,?,?,?,?)");
$stmt ->bind_param("ssssssss",$fullname[$i],$fage[$i],$frel[$i],$fcivil[$i],$fedu[$i],$foccup[$i],$finco[$i],$id);
}

ты только bind_paramи все. Заявление должно быть executeд. Это может быть выполнено несколько раз даже с одним вызовом для prepare:

$N = count($fullname);
$stmt = $conn->prepare("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES (?,?,?,?,?,?,?,?)");
for($i=0; $i < $N; $i++)
$stmt ->bind_param("ssssssss",$fullname[$i],$fage[$i],$frel[$i],$fcivil[$i],$fedu[$i],$foccup[$i],$finco[$i],$id);
$stmt->execute();
}
0

Другие решения

Подготовленные Mysqli заявления довольно сложны в использовании, поэтому я бы рекомендовал вместо этого использовать PDO. С PDO ваш код будет работать нормально:

$stmt = $conn->prepare("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES (?,?,?,?,?,?,?,?)");
$N = count($fullname);
for($i=0; $i < $N; $i++) {
$stmt->execute(array($fullname[$i],$fage[$i],$frel[$i],$fcivil[$i],$fedu[$i],$foccup[$i],$finco[$i],$id));
}

В то время как для mysqli вы должны сначала связать переменные, а затем просто изменить подмножество переменных перед выполнением. И, конечно, вы должны также вызвать execute ().

$stmt = $conn->prepare("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES (?,?,?,?,?,?,?,?)");
$stmt ->bind_param("ssssssss",$fullname_,$fage_,$frel_,$fcivil_,$fedu_,$foccup_,$finco_,$id);

$N = count($fullname);
for($i=0; $i < $N; $i++)
$fullname_ = $fullname[$i];
// and so on
$stmt->execute();
}

Обратите внимание, что при использовании подготовленный Заявления вы должны подготовить и связать только один раз.

0

Если вы, ребята, ищете решение. вот:
спасибо за тех, кто поделился своими кодами и помог мне дать идеи, чтобы решить эту проблему.

$stmt = $conn->prepare("INSERT INTO famcomp (fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) values (?,?,?,?,?,?,?,?)");

for ($i=0; $i<count($fullname); $i++) {
$fullname1 = $fullname[$i];
$fage1 = $fage[$i];
$frel1 = $frel[$i];
$fcivil1 = $fcivil[$i];
$fedu1 = $fedu[$i];
$foccup1 = $foccup[$i];
$finco1 = $finco[$i];
$id1 = $id;
$stmt->bind_param('sssssssi', $fullname1, $fage1, $frel1, $fcivil1, $fedu1, $foccup1, $finco1, $id1);

$stmt->execute();
}
echo "Done";

$stmt->close();
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector