1

下面显示的代码使用 implode() 执行 mysql 查询,以在一个表达式中搜索多个变量,我喜欢:

<?
include("connect.php"); // file to connect to db

$states = array('CA','CO','TX');
$states_str = implode("','", $states);

$query="SELECT * FROM table1 WHERE state IN ('$states_str')";

$result=mysql_query ($query);
while($row = mysql_fetch_array($result)) {
echo $row['state'];
}
?>

但我遇到了一个新问题。从上面的“状态”可以看出是硬编码的。

我希望用户能够选择他们想要提取的状态,将该选择保存到数据库中的单独表中,然后将该列表读入上面显示的“状态”数组。像这样的东西:

<?
include("connect.php"); // file to connect to db

$sql_gs="SELECT states_c FROM states WHERE id='1'";
$result_gs=mysql_query($sql_gs);
$row_gs = mysql_fetch_row($result_gs);
$gcs = $row_gs[0];

$states = array($gcs);
$states_str = implode("','", $states);

$query="SELECT * FROM table1 WHERE state IN ('$states_str')";

$result=mysql_query ($query);
while($row = mysql_fetch_array($result)) {
echo $row['state'];
}
?>

但是这段代码会引发错误。

保存到上述 states 表中的内容,以及 states_c 字段(一个 VARCHAR 字段)中包含的内容是:

'CA','CO,'TX'

所以上面代码中的'$gcs'变量......

echo $gcs; // result 'CA','CO,'TX'

换句话说,$gca 的文本(用于“获取选择的状态”)与上面的硬编码版本中的文本完全相同

但是当我尝试放置 $gca 变量的结果时,完全相同的文本,我得到一个错误,没有数据被提取,因为在这个语句中

    $states = array($gcs); // $gcs reads exactly as 'CA','CO,'TX'

数据不被读取,而在这个

    $states = array('CA','CO,'TX');

状态被识别并且代码触发。

尝试通过命名变量在这行代码中放置相同的文本而不是以硬编码方式“拼写出来”有什么问题?

TIA

====================

更新

我试过这个:

<?
include("connect.php"); // file to connect to db

$sql_gs="SELECT states_c FROM states WHERE id='1'";
$result_gs=mysql_query($sql_gs);
$row_gs = mysql_fetch_row($result_gs);
$gcs = $row_gs[0];

$states = explode("','", $gcs); // replaces $states = array('CA','CO','TX');
$states_str = implode("','",$states);

$query="SELECT * FROM table1 WHERE state IN ('$states_str')";

$result=mysql_query ($query);
while($row = mysql_fetch_array($result)) {
//echo $row['mail_state']; 
}

?>

但仍然没有结果...

4

1 回答 1

0

使用爆炸。

$states = explode(",",$gcs);

唔。在查看了您的内爆声明之后。您可能实际上需要:

$states = explode("','",$gcs);

http://php.net/manual/en/function.explode.php

于 2013-11-07T21:23:27.100 回答