我被困在这一小时。
我有一系列变量($ 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++;
};
答案 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
...
}