【问题标题】:php foreach with sqlphp foreach 与 sql
【发布时间】:2014-01-14 03:42:22
【问题描述】:

我有一个名为“问题”的数组,我正在尝试使用 foreach 将其插入到 mysql 中。数组如下所示:

    Array
    (
    [0] => Array
        (
        [booking_id] => 936
        [question_id] => a
        [value] => 4
        )

    [1] => Array
        (
        [booking_id] => 936
        [question_id] => b
        [value] => 3
        )

    [2] => Array
        (
        [booking_id] => 936
        [question_id] => c
        [value] => 2
        )

    [3] => Array
        (
        [booking_id] => 936
        [question_id] => d
        [value] => 1
        )
     )

FOREACH 看起来像这样:

$sql = array(); 
foreach( $_POST['questions'] as $row ) {

    $sql[] = '("'.$row['booking_id'].'", "'.$row['question_id'].'", '.$row['value'].')';
}

mysql_query('INSERT INTO table (booking_id, question_id, value) VALUES '.implode(',', $sql));

foreach 只是将数组中的第一项插入到表中,而不是循环遍历整个数组。

任何想法我哪里出错了?

【问题讨论】:

  • 您确定 $_POST 包含您认为的内容吗?
  • print_r($_POST['questions']);给出上述数组
  • 所有 booking_id 都是 936 ..?
  • 如果booking_id 是您的主键并且不能有重复项,并且每条记录都有id=936,那么这就是您的问题。尝试在 mysql_query() 语句的末尾添加 ` or die(mysql_error())`。
  • 发现了问题 - 它是主键。显然不是故意的。谢谢。

标签: php mysql arrays foreach


【解决方案1】:

现在是时候将 PDO 或 MySQLi 与 PHP 一起使用了。 这是一个工作示例。您可以将 $arr 替换为 $_POST 并进行一些重构以满足您的需求。

$mysqli = new mysqli('localhost', 'root', '', 'dachi');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$arr = array(
  array(
    'booking_id' => 936,
    'question_id' => 15,
    'value' => 4,
  ),
  array(
    'booking_id' => 936,
    'question_id' => 15,
    'value' => 3,
  ),
);

foreach ($arr as $rec) {
  $stmt = $mysqli->prepare("INSERT INTO `test` (`booking_id`,`question_id`,`value`) VALUES (?,?,?)");
  // You will probably need to change 'iii'
  // i = integer
  // s = string
  // So you might have something like isi if you need like that or sss
  $stmt->bind_param('iii', $rec['booking_id'], $rec['question_id'], $rec['value']);
  $d = $stmt->execute();
  $stmt->close();
}

【讨论】:

  • mysqli/PDO 是否需要在服务器上安装?刚刚为一个新项目重新投入到这一切中,似乎发生了一些变化!
  • 您必须安装 PDO php.net/manual/en/pdo.setup.php 但 mysqli 扩展是在 PHP 5.0.0 版中引入的。
  • 顺便说一句,您的代码不安全。 “真实”的谣言:现在“每个人”都在使用准备好的语句来保证安全
  • 我知道。我打算在变量上运行 mysql_real_escape_string。看起来这个方法有点过时了。
  • mysql 已被弃用,如 php 网站上所述。 php.net/manual/en/function.mysql-real-escape-string.php红色可以看到。
【解决方案2】:

我实际上已经复制了代码并让它在实际的 MySQL 服务器上完美运行,据我所见,代码中没有错误。

我能猜到的唯一问题是唯一索引会阻止在同一个 booking_id 下添加多条记录。

booking_id 字段上是否有防止添加多条记录的主要/唯一索引?

【讨论】:

  • 为什么投反对票?这似乎是值得研究的事情。
  • @maackle 如果有人对这个问题有什么要问的,应该是评论。如果他们试图回答问题,则应将其表述为答案。
  • @msg7086 - 谢谢。这确实是问题所在。非常感谢。愚蠢的事情要错过。
  • @winterblood 感谢您的提示。我是社区的新手,在构建我的话方面并不那么好。在不回答问题本身的情况下,我很难在评论中要求澄清。
  • @msg7086 别担心,我们曾经都是新手,StackOverflow 的做事方式有时可能非常特别。
【解决方案3】:
// $sql query value to get data in DB
$branches= array();
$sql = array();
while ($row = mysql_fetch_array($sql))
{
  array_push($question, $row);

}
 // this part to loop data fetch in sql
   $branch_type = '';
   foreach ($question as $NBU) {

    $sql[] = '("'.$row['booking_id'].'", "'.$row['question_id'].'", '.$row['value'].')';

    }

   mysql_query('INSERT INTO table (booking_id, question_id, value) VALUES '.implode(',', $sql));

不要使用 $_POST['questions'] 因为 foreach 只读取数组数据。

【讨论】:

  • 尝试查看变量是否在数组中。你循环的那个
猜你喜欢
  • 2013-04-26
  • 2021-09-20
  • 2017-09-27
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多