从表中选择*,其中名称为%O%

时间:2014-05-31 10:18:31

标签: php mysql sql

在phpMyAdmin中查询

SELECT * FROM table WHERE value1 LIKE '%O%' OR value2 LIKE '%1%'

很好地返回包含O或1的所有行。

但是,在PHP脚本中实现的相同查询仅返回匹配O或1的第一行。而是关闭与O或1匹配的所有行。

这是我目前的PHP脚本:

mysqli_select_db ($con, $database) or die (mysqli_error());

            $sqli = mysqli_query ($con,"SELECT * FROM table WHERE VALUE1 LIKE '%O%' OR VALUE2 LIKE '%1%'") or die (mysqli_error()); 

            $echo = mysqli_fetch_assoc($sqli);

            if (empty ($echo))
            {
                echo "No matching results found.";
            }
            else
            {
                echo "<table width='50%' border='1'>";
                echo "<tr><th>VALUE1</th><th>VALUE2</th></tr>";
                echo "<tr><td>{$echo["VALUE1"]}</td>";
                echo "<td>{$echo["VALUE2"]}</td></tr>";
            }

输出只是第一个匹配的行。而不是所有匹配的行。 当我使用print_r而不是表行时。

1 个答案:

答案 0 :(得分:3)

你必须使用像这样的循环遍历所有行

if( !mysqli_num_rows($sqli) )
{
    echo "No matching results found.";
} else {
    $table = "<table width='50%' border='1'>\n";
    $table .= "<tr><th>VALUE1</th><th>VALUE2</th></tr>\n";
    while( $echo = mysqli_fetch_assoc($sqli) )
    {
        $table .= "<tr><td>{$echo['VALUE1']}</td><td>{$echo['VALUE2']}</td></tr>\n";
    }
    $table .= "</table>";
}

注意我添加了几行代码来计算行数并在找不到匹配项时显示消息(因为我打算从你的问题中找到你的目标)。


编辑:更好的方法是使用内置的num_rows而不是重新发明轮子


编辑2:我有一种感觉,他不希望表格为每一行复制。稍微改变一下代码