通过PHP的MySQL查询找不到正确的语法

时间:2018-07-31 19:14:06

标签: php mysql

嗨,我有一个php页面,我正试图将其转换为名为“ songlist”的mySQL数据库表的查找页面。

如果我将$ sql变量设置为“ SELECT * FROM songlist”之类的内容 它会正确显示在页面上。我的问题是该表有3列SongTitle,Song#和Artist。现在,我只是将“王子”硬编码到$ search变量中。然后我试图使用OR的多个LIKE查询,但是无论我如何尝试。该页面加载错误,警告标志为零。我看过的大多数解决方案只处理一栏或不符合要求...有人可以通过不会导致错误的$ sql语句来帮助我。这是我的代码。

<?php
$dom = new DOMDocument();
//$dom->loadHTMLfile('http://remoteDomain/thispage.html');
$search = 'prince'; //$dom->getElementById('search').value;


$db_host = 'localhost'; // Server Name
$db_user = 'root'; // Username
$db_pass = ''; // Password
$db_name = 'karaoke'; // Database Name

$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$conn) {
    die ('Failed to connect to MySQL: ' . 
mysqli_connect_error());    
}

$sql = 'SELECT * FROM songlist WHERE (SongTitle LIKE 
'%$search%' OR Song# LIKE 
 '%$search%' OR Artist LIKE '%$search%')';
$query = mysqli_query($conn, $sql);

if (!$query) {
    die ('SQL Error: ' . mysqli_error($conn));
 }
?>
<html>
<head>
<title>Songs Database</title>
<style type="text/css">
    body {
        font-size: 15px;
        color: #343d44;
        font-family: "segoe-ui", "open-sans", tahoma, arial;
        padding: 0;
        margin: 0;
    }
    table {
        margin: auto;
        font-family: "Lucida Sans Unicode", "Lucida Grande", "Segoe Ui";
        font-size: 14px;
    }

    h1 {
        margin: 25px auto 0;
        text-align: center;
        text-transform: uppercase;
        font-size: 17px;
    }

    table td {
        transition: all .5s;
    }

    /* Table */
    .data-table {
        border-collapse: collapse;
        font-size: 18px;
        min-width: 537px;
    }

    .data-table th, 
    .data-table td {
        border: 1px solid #e1edff;
        padding: 7px 17px;
    }
    .data-table caption {
        margin: 7px;
    }

    /* Table Header */
    .data-table thead th {
        background-color: #508abb;
        color: #FFFFFF;
        border-color: #6ea1cc !important;
        text-transform: uppercase;
    }

    /* Table Body */
    .data-table tbody td {
        color: #353535;
    }
    .data-table tbody td:first-child,
    .data-table tbody td:nth-child(4),
    .data-table tbody td:last-child {
        text-align: right;
    }

    .data-table tbody tr:nth-child(odd) td {
            background-color: #f4fbff;
    }
    .data-table tbody tr:hover td {
        background-color: #ffffa2;
        border-color: #ffff0f;
    }

    /* Table Footer */
    .data-table tfoot th {
        background-color: #e5f5ff;
        text-align: right;
    }
    .data-table tfoot th:first-child {
        text-align: left;
    }
    .data-table tbody td:empty
    {
        background-color: #ffcccc;
    }
   </style>
   </head>
   <body>
    <input id = "search" style = "width:90%;height:50px; background-color:black; color:white; font-size:46px">
    <table class="data-table">
                <thead>
        <tr>
            <th>SongTitle</th>
            <th>Song#</th>
            <th>Artist</th>   
        </tr>
    </thead>
    <tbody>
    <?php
    $no     = 1;

    while ($row = mysqli_fetch_array($query))
    {
           echo '<tr>
                    <td>'.$row['SongTitle'].'</td>
                    <td>'.$row['Song#'].'</td>
                    <td>'.$row['Artist']. '</td>
                </tr>';
                $no++;
        }?>
        </tbody>

    </table>
</body>
</html>

2 个答案:

答案 0 :(得分:2)

您需要修正引号的使用:

"SELECT * FROM songlist WHERE (SongTitle LIKE '%$search%' OR Song# LIKE '%$search%' OR Artist LIKE '%$search%')"

我不知道那个标签在做什么,但我想你是想让它出现在那里。

也正如其他所有人所提到的,请使用the most modern standard与php中的数据库进行通信。

此修补程序解决了您当前的问题,试图扩展以前工作的select语句,您确实确实需要寻找比w3更好的学习方法。

答案 1 :(得分:0)

首先尝试在字符串的内部和外部放置不同的引号。还要在字段名称周围加上反引号。

"SELECT * FROM songlist WHERE (
`SongTitle` LIKE '%$search%' 
OR `Song#` LIKE '%$search%'
OR `Artist` LIKE '%$search%')";