2017-09-03 104 views
-1

我每次尝试删除my表中删除的条目时,都会在我的PHP中遇到问题,但会输出错误。误差如下:从PHP删除表时删除mySQL错误

警告:mysqli_query()[function.mysqli-查询]:无法提取的mysqli

警告:mysqli_num_rows()预计参数1被mysqli_result, 空给出

警告:mysqli_close()[function.mysqli关闭]:无法获取的mysqli

我似乎无法找出为什么发生这种情况,可能是很简单的,但我是相当新到MySQL的如此希望更高级的人可以告诉我哪里出错了。

<? 
if(isset($_GET['deleteTweet'])) { 
    $deleteTweet = $_GET['deleteTweet']; 

    $sql = "DELETE FROM bestTweets WHERE id=".$deleteTweet; 

    if (mysqli_query($conn, $sql)) { 
     echo "Record deleted successfully"; 
    } else { 
     echo "Error deleting record: " . mysqli_error($conn); 
    } 
    mysqli_close($conn); 
} 

$sql = "SELECT id, tName, tUsername, tTimeDate, tBody FROM bestTweets"; 
$result = mysqli_query($conn, $sql); 

$onMouseOver = 'onmouseover="this.src='."'IMAGES/binBtn_Hover.svg'".'" '; 
$onMouseOut = 'onmouseout="this.src='."'IMAGES/binBtn.svg'".'"'; 

if (mysqli_num_rows($result) > 0) { 
    // output data of each row 
    while($row = mysqli_fetch_assoc($result)) { 
     echo 
     '<div id="tweetContainer" class="tweetContainer"> 
      <div id="tweetMain"> 
       <div id="tweetName"> 
        <p>'.$row['tName'].'</p> 
       </div>'. 

       '<div id="tweetUsername"> 
        <p>'.$row['tUsername'].'</p> 
       </div>'. 

       '<div id="tweetDateTime"> 
        <p>' .$row['tTimeDate'].'</p> 
       </div>'. 

       '<div id="tweetBody"> 
        <p>'.$row["tBody"].'</p> 
       </div> 
       <div id="tweetSave"> 
        <form action="Saved.php?isset=true&deleteTweet='.$row["id"].'" method="post"> 
         <button type="submit" name="binBtn1" class="saveBtn"><img src="IMAGES/binBtn.svg"'.$onMouseOver.$onMouseOut.' width="50px" height="50px"></button> 
        </form> 
       </div> 
      </div> 
     </div>';} 
    } 
    else { 
     echo "0 results"; 
    } 
mysqli_close($conn); 
?> 
+0

您是否已将'$ conn'定义为连接?你为什么要'mysqli_close($ conn);'在查询完成之前? – Qirel

+0

你的代码容易受到SQL注入的攻击,你应该使用mysqli和[参数绑定](http://php.net/manual/en/mysqli-stmt.bind-param.php) –

回答

2

如果您删除一行,您所做的最后一件事是关闭连接!

更改为...

<? 
if(isset($_GET['deleteTweet'])) { 
    $deleteTweet = $_GET['deleteTweet']; 

    $sql = "DELETE FROM bestTweets WHERE id=".$deleteTweet; 

    if (mysqli_query($conn, $sql)) { 
     echo "Record deleted successfully"; 
    } else { 
     echo "Error deleting record: " . mysqli_error($conn); 
    } 
    //mysqli_close($conn); 
} 

下一个查询试图用一个封闭的连接。

+0

另外,他应该检查' $ conn'是一个mysqli连接与否。如果打开连接失败,IIRC'mysqli_open(...)'返回NULL。 – DBX12

+1

我做了很多假设 - 连接对删除起作用,因此可以,OP将在某些时候改为使用预准备语句。但目前这至少应该显示问题出在哪里。 –

+0

确实有改进的余地,但你的回答指出了主要问题。 – DBX12

0

两个建议:

  1. 检查是否已成功建立连接(因为我无法找到你的代码$con)。
  2. 确保您没有过早关闭连接。