提问人:JahIsGucci 提问时间:4/11/2023 最后编辑:DharmanJahIsGucci 更新时间:4/11/2023 访问量:40
将PDO数组转换为Mysqli数组
Converting PDO Array to Mysqli Array
问:
我正在尝试将此PDO转换为Mysqli。这是一个简单的数组,我用它来将数据插入到数据库中的表中。
以下是原始PDO代码:
if(isset($_POST["item_name"]))
{
include('database_connection.php');
for($count = 0; $count < count($_POST["item_name"]); $count++)
{
$data = array(
':item_name' => $_POST["item_name"][$count],
':item_category_id' => $_POST["item_category"][$count],
':item_sub_category_id' => $_POST["item_sub_category"][$count]
);
$query = "
INSERT INTO items
(item_name, item_category_id, item_sub_category_id)
VALUES (:item_name, :item_category_id, :item_sub_category_id)
";
$statement = $connect->prepare($query);
$statement->execute($data);
}
echo 'ok';
}
这是我将其更改为 mysqli 的尝试:
<?php
//insert.php;
if(isset($_POST["item_name"]))
{
include('database_connection.php');
for($count = 0; $count < count($_POST["item_name"]); $count++)
{
$data = array(
':item_name' => $_POST["item_name"][$count],
':item_category_id' => $_POST["item_category"][$count],
':item_sub_category_id' => $_POST["item_sub_category"][$count]
);
$statement=$connect->prepare("
INSERT INTO items
(item_name, item_category_id, item_sub_category_id)
VALUES (:item_name, :item_category_id, :item_sub_category_id)
");
$statement->execute($data);
}
echo 'ok';
}
?>
我似乎想不通这一点。“for”循环和数组看起来可以保持不变 - 所以我刚刚编辑了我的 mysqli 准备和执行,但它不起作用。
答:
1赞
RiggsFolly
4/11/2023
#1
MySQLI 不支持命名参数,参数使用占位符?
此外,您可以准备一次语句,然后多次绑定和执行,省去了服务器多次编译和优化同一语句的行程。注意这在 PDO 中也是可能的:)
<?php
//insert.php;
include 'database_connection.php';
if (isset($_POST["item_name"])) {
//prepare once, bind and execute multiple times in the loop
$statement = $connect->prepare("INSERT INTO items
(item_name, item_category_id, item_sub_category_id)
VALUES (?,?,?)");
foreach ($_POST["item_name"] as $i => $val) {
$statement->bind_param(
'sss',
$val,
$_POST["item_category"][$i],
$_POST["item_sub_category"][$i]
);
$statement->execute();
}
echo 'ok';
}
?>
或者正如达曼所说,你可以
<?php
//insert.php;
include 'database_connection.php';
if (isset($_POST["item_name"])) {
//prepare once, bind and execute multiple times in the loop
$statement = $connect->prepare("INSERT INTO items
(item_name, item_category_id, item_sub_category_id)
VALUES (?,?,?)");
foreach ($_POST["item_name"] as $i => $val) {
$statement->execute( [
$val,
$_POST["item_category"][$i],
$_POST["item_sub_category"][$i]
]
);
}
echo 'ok';
}
?>
评论
0赞
JahIsGucci
4/11/2023
哇,谢谢伙计,你是救命恩人!我试图在 phpdelusions.net/mysqli_examples/insert 上学习完全相同的东西。不过,您的代码看起来有点不同,因为您在 foreach 循环中添加了“$i=$val”。你有没有偶然的资源,所以我可以学习你的方法?:)如果不是一切都很好 - 无论如何我都很感激答案
0赞
RiggsFolly
4/11/2023
我这样做的方式没有什么特别不寻常的。只是不记得我上次在PHP中编写一个循环是什么时候,除了测试大得离谱的表数据加载之外,其他任何事情for
1赞
Dharman
4/11/2023
顺便说一句,没有必要使用 .只需将数组传入即可bind_param
execute
0赞
RiggsFolly
4/11/2023
这完全是关于循环和事实,你可以做,然后使用 the 来索引其他数组,假设它们的大小都相同foreach
foreach( $arr as $key => $value)
key
评论
:item_name, :item_category_id, :item_sub_category_id
?
:foo