【问题标题】:PHP - for statement in a stringPHP - 字符串中的 for 语句
【发布时间】:2013-08-21 00:57:22
【问题描述】:

我有一个我想要执行的 MySQL 语句,我想在这个语句中包含一个 for 循环来定义数据将被输入的列等。

我目前拥有的代码是

$stmt = $conn->prepare('INSERT into DATA ('.
    for($i = 0; $i < count($columns); $i++) {
        echo $columns[$i];
    }
    .') VALUES ('.
    for($i = 0; $i < count($columns); $i++) {
       echo ':'.$columns[$i].' , ';
    }
    .')');

显然这不起作用,但如果它也在第二个 for 语句中起作用,它会在每个循环结束时回显一个逗号,这将导致最后一个循环出错,所以还有办法解决这个问题去?

提前致谢!

【问题讨论】:

  • 你可以使用 implode 代替带有 ',' 分隔符的 for 循环。您能否回显查询并检查查询是否在您可能打印值而不是列名的列中正常工作..只需“echo $i;”使用 foreach
  • 新建变量 $prepare="INSERT INTO data ("; 然后在 for 循环中将数据添加到变量中
  • 你可以使用implode函数。
  • @DeiForm 你能解释一下吗?
  • 看答案,smh这样

标签: php mysql string for-loop


【解决方案1】:

使用join/implode函数:

$params = array_map(function($var){return ':'.$var;}, $columns);
$sql = 'INSERT into DATA ('.join(',', $columns).') VALUES ('.join(',', $params).')';    
$stmt = $conn->prepare($sql);

【讨论】:

    【解决方案2】:

    您应该在 prepare() 函数的外部创建查询以使其更容易。

    这样的东西会更好/更清晰:

    $count = count ($columns); // Avoid using count in your loop init (Performances)
    $query = 'INSERT INTO DATA (' .
    for($i = 0; $i < $count; $i++) {
        $query .= $columns[$i];
    }
    $query .= ') VALUES (';
    for($i = 0; $i < $count; $i++) {
       if ($i != $count - 1) $query.= ':'.$columns[$i].' , ';
       else $query .= ':'.$columns[$i]; // No coma for the last value
    }
    $query .= ')';
    $stmt = $conn->prepare($query);
    

    【讨论】:

      【解决方案3】:

      使用implode的另一种方法:

      $sql = "INSERT into DATA (`"  . implode('`,`', $columns) . "`) values (:" . implode(',:', $columns) . ")"
      $stmt = $conn->prepare($sql);
      

      示例结果:

      // Input array
      $columns = array('A', 'B', 'C');
      
      // Output
      INSERT into DATA(`A`,`B`,`C`) values (:A,:B,:C)
      

      【讨论】:

        猜你喜欢
        • 2012-12-21
        • 2018-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        • 2020-12-06
        • 2013-01-06
        • 2015-08-23
        相关资源
        最近更新 更多