gpt4 book ai didi

php - 从 MySQL 和 PDO (PHP) 填充 HTML; foreach 循环无法写入 MySQL 数据

转载 作者:行者123 更新时间:2023-12-01 00:26:52 25 4
gpt4 key购买 nike

如标题所述,我的目标是使用 MySQL 数据库中的数据生成 HTML 表格。

我使用的一般方法是合理的,因为我已经手动编写了一系列单元格,但我试图扩展它以包含大量字段,因此我尝试使用 PHP 为单元格编写 HTML和 foreach 循环数组。我已经写下了我的工作背景和步骤,既为我的问题提供了背景,也为处于类似情况的人们提供了一般帮助。但是,我知道我的问题具体出在一段代码中 - 如果您想直接跳到它,请在下面清楚地指出。

第 1 步为我希望字段具有的标题和 MySQL 数据库中的列名定义数组:

$titles  = array('Name', 'Age', 'Height', 'Weight');
$headers = array('q1', 'q2', 'q3', 'q4');

第 2 步:连接到数据库(之前定义的 $username 和 $password):

try {
$pdo = new PDO('mysql:host=localhost; dbname=db01', $username, $password);
$pdo->exec("SET CHARACTER SET utf8");

第 3 步:通过几个连接创建我的 SQL 语句,并获取 $result:

$sql ="SELECT";

foreach(array_combine($headers, $titles) as $header => $title) {
$sql .= "`$header` AS `$title`,";
}

$sql .= "`q5` AS `Eye Color`";
$sql .= "FROM samdata.CO_data";


$result = $pdo->query($sql);

第 4 步:通过连接静态 HTML 和上述 SQL 查询的结果来创建 $html_table

if($result !== false) {
$html_table = '<table><tr>';
foreach($titles as $title) {
$html_table .= "<th> $title </th>";
}

$html_table .='</tr> <tr>';


//*********PROBLEM SECTION BELOW **************************
foreach(array_combine($result, $titles) as $row => $title) {
$html_table .= "<td>' .$row\['$title'\]. '</td>";
}
}
//*********PROBLEM SECTION ABOVE **************************

$html_table .= '</tr> </table>';
$conn = null;

echo $html_table;
}

我知道问题出在指示的部分,因为我已经测试了所有其他部分,如果我手动写出而不是组合数组/foreach 循环,例如:

foreach($result as $row) {
$html_table .= '
<tr>
<td>' .$row['Names']. '</td>
<td>' .$row['Age']. '</td>
<td>' .$row['Height']. '</td>
</tr>';
}

代替循环,然后它工作正常并显示这些标题的每个结果的数据,问题是我有数百个并且想要比一个一个地写出来更优雅(和懒惰)!

我哪里错了?非常感谢您的帮助。

最佳答案

看起来您的问题行中有一些不匹配的引号:

$html_table .= "<td>' .$row\['$title'\]. '</td>";

您以双引号开头。在双引号内,不能使用单引号来终止字符串。相反,双引号只能由双引号终止。单引号也是如此。意思是,这可以通过以下两种方式之一解决:

$html_table .= "<td>" . $row[$title] . "</td>";

或者:

$html_table .= '<td>' . $row[$title] . '</td>';

另请注意我是如何删除 $title 周围的引号的。它们是不必要的,并且会使 PHP 做一些不必要的处理。

注意引号现在是如何匹配的。在编辑器中编写代码时,一定要查看语法是如何突出显示的。您应该看到,在您的原始代码中,变量和索引位于字符串内,因为它们都是相同的颜色。

如果您依赖双引号字符串中的变量扩展(如 echo "Hello $name";),请知道访问数组的字符串键将不起作用,除非它们被括号包围,例如所以:

echo "Hello {$person['FirstName']}";

但是,您可以像这样使用数字索引:

echo "Hello $people[0]";

因此对于您的代码,如果您不想结束字符串并连接值然后再次开始字符串,则需要执行此操作:

$html_table .= "<td>{$row[$title]}</td>";

但是,我发现这种语法很丑陋,它让 PHP 进行额外的处理以找到需要扩展变量的地方。恕我直言,使用串联可以避免所有这些问题。

关于php - 从 MySQL 和 PDO (PHP) 填充 HTML; foreach 循环无法写入 MySQL 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com