PHP MySQLi虽然循环
我在PHP中创建我的while循环时遇到了一些问题。 我希望能够在一个while循环中从多个表中提取数据。例如,我有一张名为“发票”的表格和另一张名为“客户”的表格。两个表都有一个名为Email的字段,并且每当我尝试打印或回显该行时,我只能得到其中的一个。也许你可以看看我的代码。PHP MySQLi虽然循环
<?
$invoice_edit_query = $db->query("SELECT * FROM invoices, customers
WHERE invoice.customer_id = kunder.id AND
invoices.kunde_id = '$_GET[edit]' AND
invoices.invoice_year = '$_GET[year]' AND
invoices.invoice_nr = '$_GET[nr]'") or die(mysqli_error($db));
while($row = $invoice_edit_query->fetch_object()){
?>
<td>Email: <input type="text" name="email" value="<? print $row->email; ?>"></td>
<?
}
?>
是否有办法打印我的表的值,如WHERE语句invoices.email或customers.email?也许不是写的:
$row->email;
然后写:
$row->invoices.email;
您需要别名域,这样就可以seperately引用它们:
<?php
$id = (int) $_GET['edit'];
$year = (int) $_GET['year'];
$nr = (int) $_GET['nr'];
$sql = "SELECT customer.email as customer_email, invoices.email as invoices_email, * FROM invoices
JOIN customers on customer.customer_id = invoices.id
WHERE
invoices.kunde_id = '$id' AND
invoices.invoice_year = '$year' AND
invoices.invoice_nr = '$nr'";
$invoice_edit_query = $db->query($sql);
while($row = $invoice_edit_query->fetch_object()){
?>
<td>Email: <input type="text" name="email" value="<? print $row->customer_email; ?>"></td>
<?
}
?>
注意我还添加了一些基本的测试,以防止SQL注入。
非常感谢!但有一个问题,为什么我应该使用JOIN呢? –
使用JOIN比查看一组WHERE标准更易于阅读。除此之外,如果您使用JOIN(并且正在合并来自两个以上表格的行),则可以控制数据组合在一起的顺序,最后您可以考虑其中某些数据可能不同时存在的情况有关表格。 – kguest
试试 “SELECT invoices.email as email1, customers.email as email2, other fields FROM
” ......然后打印出来的那些。
是的,它可以完美地工作,但它们不是一种让SELECT * FROM这些表而不必输入每个字段的方法吗? –
尝试选择invoices.email作为email1,customers.email作为email2,* ...我不知道它是否有效:P – Iansen
是的,似乎工作正常,但仍然是一个混乱输入每个领域..通过方式,我必须键入SELECT invoices.email作为email1,customers.email作为email2,发票。*,customers。* FROM ... –
嘿,我在我的项目中做了同样的事情。
protected function _dynamicBindResult($stmt)
{
$parameter = array();
$result = array();
//get list of all columns in Parameter array
$count = $stmt->columnCount();
for ($i = 0; $i < $count; $i++) {
$temp = $stmt->getColumnMeta($i);
$parameter[] = $temp['name'];
}
//now filter row on basis of parameter array
while ($row = $stmt->fetch()) {
$x = array();
foreach ($parameter as $key => $column) {
$x[$column] = $row[$column];
}
$result[] = $x;
}
return $result;
}
呼叫在您的项目&通$行作为参数,这个功能_dynamicBindResult。然后你可以使用$ result-> column_name。
试试吧。我希望它一定会帮助你。
您可以使用MySQL的'DESCRIBE'功能获取所有字段名称。
https://dev.mysql.com/doc/refman/5.0/en/getting-information.html
可以“描述”表,它会给你的每个字段中的“场”列。遍历每个字段并将其添加到您的查询中。
我建议使用ORM,比如Doctirine或Yii的ActiveRecord –
如果你的循环内有'var_dump($ row)',它会显示什么? – dave
这是我得到的(表格,行等从丹麦语翻译成英语之前): 对象(stdClass)#6(22){[“id”] =>字符串(1)“2”[“ kunde_id“] => string(1)”2“[”faktura_aar“] => string(4)”2014“[”faktura_nr“] => string(3)”006“[”dato“] => string(10 )“2014-02-10”[“debitor”] => NULL [“reference”] => NULL [“forsikringsselskab”] => NULL [“attention”] => NULL [“email”] => string(21 )} –