循环中使用PHP变量进行MySQL更新

时间:2011-08-19 00:57:21

标签: php mysql

我被困在这一小时。

我有一系列变量($ recordsQuestion_1,$ recordsQuestion_2等)。由于这些变量的总数发生了变化,我想在循环中更新我的数据库。但是,我无法弄清楚如何实际存储变量。只需$ l或“recordsQuestion_1(2,3,等)”进入数据库。

这就是我所拥有的,尝试掌握变量变量(甚至不确定是否如何做到这一点),但无法获得任何工作。也许是阵列?

建议?

$l = 1;
while ($l <= $num_rows) {
    $query = "UPDATE records SET recordListingID = $recordsQuestion_" . $l . " WHERE recordID = " . $l;
    mysql_query($query) or die(mysql_error());
    $l++;   
};

4 个答案:

答案 0 :(得分:3)

如果您要使用不同数量的变量($recordsQuestion_1$recordsQuestion_2 ... $recordsQuestion_n),请使用array代替,因为这样做更容易合作。

然后可以产生更清晰的循环:

$recordsQuestion = array(
  'Zero' , # PHP Arrays are zero-indexed, so the first element will have a key of 0
  'One' ,
  'Two' ,
  ...
);

$sqlTpl = 'UPDATE records SET recordListingID = "%s" WHERE recordID = %s';
foreach( $recordsQuestion as $key => $value ){
  $sqlStr = sprintf( $sqlTpl , mysql_real_escape_string( $value ) , (int) $key );
  if( !mysql_query( $sqlStr ) ){
    # Row Update Failed
  }else{
    # Row Updated OK
  }
}

答案 1 :(得分:0)

你可能想要使用这样的东西:

$var1 = "foo";
$i = 1;

echo "${"var$i"} boo"; //foo boo

为什么不使用数组而不是一系列变量?

答案 2 :(得分:0)

澄清一下,您的案例将是:

$l = 1;
while ($l <= $num_rows) {
    $query = "UPDATE records SET recordListingID = " . ${"recordsQuestion_$l"} . " WHERE recordID = " . $l;
    mysql_query($query) or die(mysql_error());
    $l++;   
};

但是,我发现你的问题可能与SQL有关。标准SQL中不能包含可变数量的列。要存储可变数量的内容,就像您建议的那样,您可以使用其他列来表示您要调用的数字$ l。例如,

recordId | questionId | questionText
---------+------------+-------------
       1 |          1 | "Why?"
       1 |          2 | "Who?"
       1 |          3 | "When?"
       1 |          4 | "How?"
       2 |          1 | "How long?"
       2 |          2 | "Which?"
       3 |          1 | "Wherefore?"
       4 |          1 | "Really?"

在这种情况下,每个recordId可以有不同数量的问题。

答案 3 :(得分:0)

作为参考,这里是使用PDO循环的样子,添加了更多的错误处理:

$updateRecords = $db->prepare('UPDATE records SET recordListingID = :listing WHERE recordID = :id';
$failed = array();
try {
    foreach ($questions as $id => $listing) {
        if (!$updateRecords->execute(array(':id' => $id, ':listing' => $listing))) {
            # record failure message
            $failed[$id] = ...;
        }
    }
} catch (PDOException $exc) {
    # DB error; handle it
    ...
}