在我的PHP脚本中,我与服务器的连接有效,但我的SQL查询没有

时间:2016-10-28 14:48:31

标签: php mysql apache server

连接有效,我没有收到连接错误。但是当我运行脚本时,我得到一个未定义的索引错误,它输出" 0结果"虽然我的桌子是肯定的填充,我正在寻找我知道的东西在桌子上。

我使用MySQL工作台管理数据库和apache(xampp)来托管本地服务器并运行PHP脚本。这可能是问题吗?有没有办法让我在与apache网站相同的位置托管数据库?

$sql="SELECT * FROM book_table WHERE Title LIKE $input OR Author LIKE $input OR Barcode LIKE $input";
$result = $conn->query($sql);

if ($result) {

 while($row = $result->fetch_all()) {
     echo "<br>Title: " . $row["Title"]. " - Author: " . $row["Author"];
 }
} else {
 echo " <br> 0 results";
}

2 个答案:

答案 0 :(得分:4)

我的建议是PDO

$dsn = 'mysql:host=localhost;dbname='.$dbname;//$dbName is the name of your database
$user = 'root';
$pass = '123';//use your login information here
$db = new PDO($dsn, $user,$pass);
$query = "SELECT * FROM book_table WHERE Title LIKE :info OR Author LIKE :info OR Barcode LIKE :info";
$ps = $db->prepare($query);
$ps->bindValue(':info', $input)
$ps->execute();
$result = $ps->fetchAll(PDO::FETCH_ASSOC);

//iterate over result
if (!empty($results)){
    foreach ($result as $row) {
        echo "<br>Title: " . $row["Title"]. " - Author: " . $row["Author"];
    }
} else {
    echo " <br> 0 results";
}

另外,请记住以正确的方式使用MySQL LIKE。如果要匹配String的一部分,则需要使用%符号。

例如:

SELECT * FROM book_table WHERE Title LIKE "%goodbook%"

它将返回所有具有“goodbook”的行作为标题的一部分。

答案 1 :(得分:2)

你可以这样试试。由于您使用了mysqli_*,我已将其编写为语句并bind_param

注意:未经测试。所以可能需要调整一下。

$param = '$input';
$sql= $conn->prepare("SELECT * FROM book_table WHERE Title LIKE ? OR Author LIKE ? OR Barcode LIKE ?");
$sql->bind_param("s", $param);
$sql->execute();

if($res->num_rows > 0) {
   while ($row = $res->fetch()) {          
         echo "<br>Title: " . $row["Title"]. " - Author: " . $row["Author"];          
   }
} else { 
      echo " <br> 0 results"; 
}