Php 输出联接表
我目前正试图输出一个联接表 两个连接的表由Php 输出联接表,php,mysql,database,left-join,Php,Mysql,Database,Left Join,我目前正试图输出一个联接表 两个连接的表由客户表组成: 以及地址表: 然而,我得到了这个错误: 注意:未定义索引:Street 对于地址表中的每个连接索引,都会发生此错误(因此邮政编码城市和国家也会发生此错误) 我的问题是如何解决这个问题?为什么未定义是因为未使用联接行执行 $stmt = $pdo->prepare('SELECT * FROM Customer LEFT JOIN Address USING (AddressID)'); $stmt->execute();
客户
表组成:
以及地址表:
然而,我得到了这个错误:
注意:未定义索引:Street
对于地址表中的每个连接索引,都会发生此错误(因此邮政编码城市和国家也会发生此错误)
我的问题是如何解决这个问题?为什么未定义是因为未使用联接行执行
$stmt = $pdo->prepare('SELECT * FROM Customer LEFT JOIN Address USING (AddressID)');
$stmt->execute();
上面的代码就是获取联接代码的代码,然后立即用一个没有联接数据的新代码覆盖$stmt
删除这两行代码
$stmt = $pdo -> prepare('SELECT * FROM Customer');
$stmt -> execute();
它会起作用的
作为补充说明,在CustomerRowOut方法中,您使代码更难阅读
在双引号内使用变量replace system时,可以使用数组。用大括号把它们包起来就行了
因此,您当前的语法$cn…
应该是{$customerRow['CustomerName']}…
像这样包装数组的花括号将允许输出它。这也节省了内存,因为您不需要创建指针来简化回显
PHP还支持字符串类型变量中的换行符。这样整个功能就可以
function CustomerRowOutput($customerRow){
return "<tr>
<td>{$customerRow['CustomerName']}</td>
<td>{$customerRow['PhoneNo']}</td>
<td>{$customerRow['Email']}</td>
<td>{$customerRow['Street']}</td>
<td>{$customerRow['Postcode']}</td>
<td>{$customerRow['City']}</td>
<td>{$customerRow['Country']}</td>
</tr>";
}
函数customerrowutput($customerRow){
返回“
{$customerRow['CustomerName']}
{$customerRow['PhoneNo']}
{$customerRow['Email']}
{$customerRow['Street']}
{$customerRow['Postcode']}
{$customerRow['City']}
{$customerRow['Country']}
";
}
为什么未定义是因为未使用联接行执行
$stmt = $pdo->prepare('SELECT * FROM Customer LEFT JOIN Address USING (AddressID)');
$stmt->execute();
上面的代码就是获取联接代码的代码,然后立即用一个没有联接数据的新代码覆盖$stmt
删除这两行代码
$stmt = $pdo -> prepare('SELECT * FROM Customer');
$stmt -> execute();
它会起作用的
作为补充说明,在CustomerRowOut方法中,您使代码更难阅读
在双引号内使用变量replace system时,可以使用数组。用大括号把它们包起来就行了
因此,您当前的语法$cn…
应该是{$customerRow['CustomerName']}…
像这样包装数组的花括号将允许输出它。这也节省了内存,因为您不需要创建指针来简化回显
PHP还支持字符串类型变量中的换行符。这样整个功能就可以
function CustomerRowOutput($customerRow){
return "<tr>
<td>{$customerRow['CustomerName']}</td>
<td>{$customerRow['PhoneNo']}</td>
<td>{$customerRow['Email']}</td>
<td>{$customerRow['Street']}</td>
<td>{$customerRow['Postcode']}</td>
<td>{$customerRow['City']}</td>
<td>{$customerRow['Country']}</td>
</tr>";
}
函数customerrowutput($customerRow){
返回“
{$customerRow['CustomerName']}
{$customerRow['PhoneNo']}
{$customerRow['Email']}
{$customerRow['Street']}
{$customerRow['Postcode']}
{$customerRow['City']}
{$customerRow['Country']}
";
}
你完全正确,谢谢你的快速回答!我还对您的输出添加了一些改进,使其更具可读性。非常好。如果出于某种原因,OP希望避免换行符,那么只需添加多一点语法,使代码的格式如本答案所示,每行一个,但将一系列不带换行符的字符串(点运算符)串联在一起,例如。“{$custRow['City']}”
。我们还可以注意到,从数据库返回的值不能保证不包含HTML。考虑到“狡猾<代码>街道<代码>值>代码> FooHee的影响。或者更邪恶的东西。最佳做法是将潜在的不安全值包装在htmlentities
函数中。我认为@spencer7593的意思是。"" . htmlentities($customerRow['Street'])。“”
我假设我们在输入之前对值进行转义/实体编码:D@MartinBarker:另一个绝对好的观点。我认为这些条目在数据库中不是html编码的,因为在我们的商店中它们不是html编码的(按设计),这是因为数据库条目也被其他进程使用,并以其他方式输出,而不是在html页面上发出它们。(我们将html编码保留到最后一层,就在表示层,就在html页面中包含条目的地方。)此模式也有助于代码验证,我们不必回溯整个系统来验证html编码是否已完成(而不是稍后撤消)。您完全正确,感谢您的快速回答!我还对您的输出添加了一些改进,使其更具可读性。非常好。如果出于某种原因,OP希望避免换行符,那么只需添加多一点语法,使代码的格式如本答案所示,每行一个,但将一系列不带换行符的字符串(点运算符)串联在一起,例如。“{$custRow['City']}”
。我们还可以注意到,从数据库返回的值不能保证不包含HTML。考虑到“狡猾<代码>街道<代码>值>代码> FooHee的影响。或者更邪恶的东西。最佳做法是将潜在的不安全值包装在htmlentities
函数中。我认为@spencer7593的意思是。"" . htmlentities($customerRow['Street'])。“”
我假设我们在输入之前对值进行转义/实体编码:D@MartinBarker:另一个绝对好的观点。我认为这些条目在数据库中不是html编码的,因为在我们的商店中它们不是html编码的(按设计),这是因为数据库条目也被其他进程使用,并以其他方式输出,而不是在html页面上发出它们。(我们将html编码保留到最后一层,就在表示层,就在html页面中包含条目的地方。)此模式也有助于代码验证,我们不必回溯整个系统来验证html编码是否已完成(以后不会撤消)