我没有得到任何错误,但也没有得到任何结果-mysql php db

我没有得到任何错误,但也没有得到任何结果-mysql php db,php,mysql,database,forms,search,Php,Mysql,Database,Forms,Search,我试图从一个包含两列的数据库中获取用户提交的内容。一个是艺术家,一个是头衔。我想从简单表单中获取他们的输入,并将所有类似的结果输出到下一页的表中。我已经包括了到目前为止我所写的全部脚本。我没有在页面上得到任何错误,但我也没有得到任何结果。我花了几天的时间在网上寻找,看看我是否能自己解决这个问题,但我没有这样的运气。很抱歉这么罗嗦,但我是这个网站的新手,希望提供尽可能多的细节 <?php include("db_connect.php"); // - get form data from

我试图从一个包含两列的数据库中获取用户提交的内容。一个是艺术家,一个是头衔。我想从简单表单中获取他们的输入,并将所有类似的结果输出到下一页的表中。我已经包括了到目前为止我所写的全部脚本。我没有在页面上得到任何错误,但我也没有得到任何结果。我花了几天的时间在网上寻找,看看我是否能自己解决这个问题,但我没有这样的运气。很抱歉这么罗嗦,但我是这个网站的新手,希望提供尽可能多的细节

<?php 
include("db_connect.php"); 
// - get form data from "searchform.php"
$song_query = $_GET['song_query'];
// - column 1 and column 2 are all we're looking for in the db 
// - title and artist are currently the two cols. Table is named 
"song_list"
$col1 = "title";
$col2 = "artist";
$tablename = "song_list";
echo "<H1>Search results</H1>";
if ($song_query == "") {
echo "What are you going to sing? You didn't enter a search term! Please 
try again.";
exit;
}
// - pick the db connection out of the included file and give error if 
failed.
mysqli_select_db($conn, $db_name) or die(mysqli_error());
// - cleans up string inputted by user to avoid harmful code insertion 
into form
$song_query = strtoupper($song_query);
$song_query = strip_tags($song_query);
$song_query = trim($song_query);
// - set up parameters for accessing the query of the db
$sql = "SELECT $col1, $col2 FROM $tablename WHERE $col1, $col2 LIKE 
'%$song_query%'";
$result = mysqli_query($conn, $sql);
if (isset($_GET['$result'])){
if (mysqli_num_rows($result) > 0){
    echo "<table><tr>";
    echo "<th>Artist</th>";
    echo "</tr>";

while($row = mysqli_fetch_array($result)){
    echo "<tr>";
    echo "<td>" . $row['$result'] . "</td>";
    echo "</tr>";
    echo "</table>";
    }
    }
}
?>
您有错误的SQL,它是在运行时构造的

$sql = "SELECT $col1, $col2 FROM $tablename WHERE $col1, $col2 LIKE 
'%$song_query%'";
变成

$sql = "SELECT title, artist FROM $tablename WHERE title, artist LIKE 
'%$song_query%'";
看看标题在哪里,艺术家喜欢这里

$song\u query从$\u GET['song\u query']获取值,该值在运行时会更改。

其中,$col1、$col2(如“%$song\u query%”)是无效的语法,您需要说明

WHERE col1 LIKE '%something%' AND col2 LIKE '%something%'
因此,这应该可以解决问题

$sql = "SELECT $col1, $col2 
        FROM $tablename 
        WHERE $col1 LIKE '%$song_query%'
        AND $col2 LIKE '%$song_query%'";
尽管这是一个开放的领域 即使 使用


还要注意的是,您在构建表时犯了一些错误,我想我已经修复了这些错误。

$\u GET['$result']应该做什么……您希望$col1,$col2(如“%$song\u query%”)在哪里;怎么办?MySQLi往往会默默地失败。始终检查[mysqli错误]以确保数据库调用正常工作。作为一名业余爱好者,我很抱歉,我这样做是为了自学图形设计以外的知识。我正在拼凑几个教程来开发这段代码。isset消除了我的上一个错误,w3c给了我一个想法,在两列的名称中使用WHERE和LIKE。谢谢大家的输入!我还是个新手,我很感激我得到的所有帮助。我不得不把这个东西重写了五遍,但我最终还是成功了。这是一次很好的学习经历。谢谢我用了大家的一点建议来让它工作起来,我把它的废话都说出来了。哈哈,谢谢你的愚蠢!我会在卡拉OK表演的本地服务器上使用它,所以我不太担心注射攻击。托管此文件的系统将无法访问internet。至少现在我发现您提供的代码片段有错误。lol…警告:sprintf:第36行C:\xampp\htdocs\bluesky\runit.php中的参数太少致命错误:未捕获错误:调用C:\xampp\htdocs\bluesky\runit.php中布尔值上的成员函数bind_param.php:37堆栈跟踪:第37ah行C:\xampp\htdocs\bluesky\runit.php中抛出的0{main}是。我的错误。请参见修改后的sprintfIt,执行$val=%$song_query%可能更简单;
$sql = "SELECT title, artist 
        FROM songlist 
        WHERE title LIKE ? AND artist LIKE ?";

$stmt = $conn->prepare($sql);
$val = sprintf('%%%s%%', $song_query);
$stmt->bind_param('ss',$val, $val);

$stmt->execute();

$stmt->bind_result($title, $artist);

echo "<table><thead><tr>";
echo "<th>Artist</th><td>Title</th>";
echo "</tr></thead><tbody>";

while ($stmt->fetch()) {
    echo "<tr>";
        echo "<td>$artist</td>";
        echo "<td>$title</td>";
    echo "</tr>";
}
echo "</tbody></table>";