我建立了一个字符串数组,并尝试查询mySQL表。我想找到与我的项目列表相匹配的所有行,并用单词“ AND”分​​隔。我尝试了下面的代码,但没有结果返回。如何改进我的代码以使用implode执行正确的查询?

谢谢你的帮助。

 $conditions = array(
     'Monday',
     'Tuesday',
     'Wednesday'
 );
 $connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

 if (mysqli_connect_errno())
{
die("Database connection failed: " . mysqli_connect_error() . " (" . mysqli_connect_errno() . ")");
}

 $query = "SELECT * FROM match_tracker ";

 // append the conditions

 $query.= "WHERE " . implode(" AND ", $conditions);
 $result = mysqli_query($connection, $query);

 if ($result)
{
echo "Results positive.  ";
}

 if (!$result)
{
echo "Empty results.";
die("database query failed.");

最佳答案

按照您的代码,您的SQL查询应如下所示:"SELECT * FROM match_tracker WHERE Monday AND Tuesday AND Wednesday"。那是您想要的sql字符串吗?如果您希望拥有更有意义的东西,则必须使用关联数组。像下面这样更合适:

$conditions = array(
 'Monday' => '1',
 'Tuesday' => '4',
 'Wednesday' => '3'
 );
 $connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

if (mysqli_connect_errno())
{
   die("Database connection failed: " . mysqli_connect_error() . " (" . mysqli_connect_errno() . ")");
}

$query = "SELECT * FROM match_tracker WHERE true";

// append the conditions

foreach($conditions AS $key => $value)
{
   $query .= "AND $key = '". mysqli_real_escape_string($connection, $value). "'";
}
$result = mysqli_query($connection, $query);

if ($result)
{
   echo "Results positive.  ";
}

else if (!$result)
{
   echo "Empty results.";
   die("database query failed.");
}


我希望这有帮助。

10-05 21:09
查看更多