PHP - mysql_query()问题与格式错误的WHERE子句

时间:2012-07-17 09:04:57

标签: php mysql foreach

我的这个字符串包含水果名称以及由,分隔的可用颜色。使用|分隔多个水果详细信息。

$string = 'apple,red,green|banana,yellow,green';

在下面的代码中,我只使用explode()提取水果名称。并使用水果名称来查询MySQL DB中的记录。

foreach ( explode( '|', $string ) as $fruitas ) {
  $data = explode( ',', $fruitas );

  $sql = mysql_query( "SELECT * FROM user WHERE fruits = '$data[0]' ") or die ( mysql_error() );
  while ( $row = mysql_fetch_array( $sql ) ){
    $fruits = $row['fruits'];
    echo $fruits . '<br />';
  }
}

$data[0]有水果的名字。

我期望下面的输出:

APPLE    20
BANANA   20

因为苹果和香蕉是$string中的水果名称。而查询应该只为苹果和香蕉提取记录。

我知道我的代码是正确的,但当我echo()拉出记录时,什么都没有打印!。

请帮我解决问题。

*更新 找到答案 *

2 个答案:

答案 0 :(得分:1)

变化:

$fruits = $row[fruits];

$fruits = $row['fruits'];

echo $fruits . <br />

echo $fruits . '<br />';

答案 1 :(得分:1)

这不是有效的PHP,我认为你的代码根本没有运行:

echo $fruits . <br />

调试这样的事情的正确方法是首先使您的代码可以解析。然后查明您的查询是否符合预期:将mysql_query()更改为print()并查看您的查询是否正确。您可能正在查询您不希望查询的值,并且您可以在MySQL控制台(或通过phpMyAdmin)运行查询(如果可用)以查看它是否返回正确的值。

然后添加一个调试语句,如var_dump($ row);在循环中,看看你是否真的从查询中得到任何东西,然后看看$ fruits的值是否与你期望的一样。

额外:您应该在将来的项目中删除mysql并使用mysqli或PDO。它们都是更现代的数据库库,支持占位符等所需的功能。

为了给出更好的答案,您还必须在下次包含数据库结构。