【问题标题】:PHP MYSQL array foreach and insertPHP MYSQL 数组 foreach 和 insert
【发布时间】:2012-08-20 03:21:49
【问题描述】:

tbl1

id | detail
1  | this, that
2  | these, those

tbl2

id | visit  | cost
1  | this   | 20
2  | that   | 30
3  | these  | 40
4  | those  | 50

PHP:

<?php 

$id=$_GET['id'];    
$detail=$_GET['detail'];
$pieces = explode(",", $rows['detail']);

    // $pieces[0]; piece1
    // $pieces[1]; piece2        
    // $pieces[2]; piece2        
    // $pieces[3]; piece3    
    // $pieces[4]; piece4

    foreach($pieces[1] as $test){            

$query="SELECT * FROM tbl1, tbl2 WHERE
  $test = tbl2.cost AND
  tbl1.id='$id'";
    }   

$result=mysql_query($query) or die("error: " . mysql_error());

while($rows=mysql_fetch_array($result)){    
?>
<table>
    <tr>
    <td><input value="<? echo $rows['code'];?>" readonly="readonly"/></td>
    <td><input value="<? echo $rows['cost']; ?>" readonly="readonly"/></td>
    </tr>
  </table>

<?php
}
?>

对于 id=1,数组 0=>this,1=>that 所以,foreach($pieces[1] as $test),意思是“那个”

上述方法有效,但是,当我将$pieces[1] 更改为$pieces[0] 时,我仍然得到与$pieces[1] 对应的结果。而且,当我将其更改为不存在的$pieces[4] 时,我再次得到与$pieces[1] 对应的结果。

我哪里做错了?我怎样才能使这个数组工作?

根据 tbl1.id=1 piece[0]=>this,piece[1]=>that 我想让它适用于我的桌子。请帮忙。

【问题讨论】:

  • 在完成分配给$rows 的数据库查询之前,您拥有$pieces = explode(",", $rows['detail']);。应该是$pieces = explode(",", $detail);

标签: php mysql arrays foreach


【解决方案1】:

$pieces[1],你在 foreach 循环中使用的变量是一个字符串,而不是一个数组。你应该遍历 $pieces 数组,所以:

foreach($pieces as $test){ 

...不是

foreach($pieces[1] as $test){ 

【讨论】:

  • 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 '= tbl2.cost AND tbl1.id='some numbers'' 附近使用正确的语法
  • 回声$查询;那返回什么?
  • return is : SELECT * FROM tbl1, tbl2 WHERE = tbl2.cost AND tbl1.id='some numbers' $pieces[1] is missing
  • $rows['detail'] 填充在哪里?
  • 尝试只回显 $pieces[1],还有你为什么要比较 tbl2.cost(integer) 和 $pieces[1](string)。
【解决方案2】:

$pieces[1] 不是数组而是数组的一个元素($pieces), 所以最好不用循环语句,

$query="SELECT * FROM tbl1, tbl2 WHERE
  $pieces[1] = tbl2.cost AND
  tbl1.id='$id'";

谢谢

【讨论】:

  • 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 '= tbl2.cost AND tbl1.id='some numbers'' 附近使用正确的语法
【解决方案3】:

当你运行时

$result=mysql_query($query) or die("error: " . mysql_error());

它将返回 from 查询的结果。但是您的查询是什么?这是您设置 $query 的最后一个字符串,这是您的 for 循环的最后一次迭代。这似乎效率低下,而不是您的预期行为。

假设您想要所有结果(并且不关心查询优化),您可以执行以下操作:

foreach($pieces as $test){            
    $query="SELECT * FROM tbl1, tbl2 WHERE
    $test = tbl2.cost AND tbl1.id='$id'";

    $result[]=mysql_query($query) or die("error: " . mysql_error());
}

foreach ($results as $result){
    $rows=array_push(mysql_fetch_array($result));
}

现在,如果您只需要特定部分的详细信息,您甚至不需要 for 循环。

// replace 3 with the desired element
$query="SELECT * FROM tbl1, tbl2 WHERE
$pieces[3] = tbl2.cost AND tbl1.id='$id'";

$result=mysql_query($query) or die("error: " . mysql_error());

mysql_fetch_array($result);

【讨论】:

  • 你能在 $pieces[3] 上做一个 print_r 吗?
  • 空结果。我不明白为什么?
猜你喜欢
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 2013-08-02
  • 2010-11-13
  • 1970-01-01
  • 2019-07-22
  • 2014-01-08
  • 1970-01-01
相关资源
最近更新 更多