我没有得到任何错误,但也没有得到任何结果-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>";