嗨,我有一个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>
答案 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%')";