【问题标题】:insert all records in a single query does not work在单个查询中插入所有记录不起作用
【发布时间】:2018-02-28 14:52:42
【问题描述】:

我想知道为什么下面的 PHP 代码没有将值插入数据库?我试图将十个数据集插入一个执行一次的表中(=单个查询中的多行),但执行后,该表仍然是空的。

<?php
include ("credentials.php");

# Create Data
$fname2 = 'J';
$lname2 = 'M';

$values = array();
for($j = 1; $j<=10; $j++) {
    $values2 = array($fname2, $lname2);
    $values = array_merge($values,$values2);

    $fname2 .= 'O';
    $lname2 .= 'A';
}

# Create SQL
$qry = 'INSERT INTO 02_Experiment (FirstName, LastName) VALUES ';
$qry .= "(?,?), ";
$qry .= "(?,?), ";
$qry .= "(?,?), ";
$qry .= "(?,?), ";
$qry .= "(?,?), ";
$qry .= "(?,?), ";
$qry .= "(?,?), ";
$qry .= "(?,?), ";
$qry .= "(?,?), ";
$qry .= "(?,?)";
echo "<b>SQL:</b> " . $qry . "<br>"; 
# This ECHO gives:
# INSERT INTO 02_Experiment (FirstName, LastName) VALUES (?,?), (?,?), (?,?), (?,?), (?,?), (?,?), (?,?), (?,?), (?,?), (?,?)


# Database insert
$stmt2 = $mysqli->prepare($qry);

echo "<h1>Examine Array Values:</h1><br>";
echo "<pre>\n"; print_r($values); echo "</pre>\n";
echo "<br>";
echo "<pre>\n"; var_dump($values); echo "</pre>\n";


# Execution
$stmt2->execute($values);

echo "End of PHP<br>";
?>

数据库表由三行组成: id(主键,int(10), 名字(varchar(300)), 姓 (varchar(300))。 PHP 脚本没有显示任何错误。我没有找到为什么执行后数据库表仍然为空的错误。

【问题讨论】:

  • 您应该阅读一些 SQL 和准备好的语句教程。这不是准备好的语句的正确格式。
  • MySQL 查询静默失败。您需要检查mysqli_errors
  • if(!$stmt2-&gt;execute($values)){ echo "Error: " . mysqli_error($mysqli); } else { echo "Success!"; } - 当您将其替换为 $stmt2-&gt;execute($values); 时会显示什么?
  • 很好 @chris85 并想知道他们使用哪个 API 来连接。那么彼得,您使用哪一个 连接?
  • @chris85: 将我的数据库连接更改为 PDO 并调整 PHP 后,INSERT 完美运行!

标签: php prepared-statement execute mysqli-multi-query


【解决方案1】:

如果您使用的是 PDO,您的语法和用法将是正确的。 Mysqli 不支持在execute 函数中绑定所以:

$stmt2->execute($values);

不正确。您将需要使用 bind_param 或切换到 PDO 连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2017-05-19
    相关资源
    最近更新 更多