Php Can';我似乎不明白什么是';它在删除之前丢失了

Php Can';我似乎不明白什么是';它在删除之前丢失了,php,Php,我正在尝试使用我的删除按钮,该按钮连接到一个单独的文件,用于删除数据库表中的数据 我已经成功地在显示数据时在数据中的每一行旁边放置了一个按钮,但我无法让它删除该行,因为我收到以下错误消息: DELETE FROM users WHERE id = SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that correspon

我正在尝试使用我的删除按钮,该按钮连接到一个单独的文件,用于删除数据库表中的数据

我已经成功地在显示数据时在数据中的每一行旁边放置了一个按钮,但我无法让它删除该行,因为我收到以下错误消息:

DELETE FROM users WHERE id = 
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
我相信是很小的东西,也许吧?但我就是不知道是什么

admin.php

<?php
$servername = "localhost";
$username = "root";
$pass = "root";
$dbname = "tutor_database";

// Create connection
$conn = new mysqli($servername, $username, $pass, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, FirstName, LastName, Role, Email, Username FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table><tr><th>ID</th><th>First Name</th><th>Last Name</th><th>Role</th><th>Email</th><th>Username</th><th>Delete</th></tr>";
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["id"]."</td><td>".$row["FirstName"]."</td><td>".$row["LastName"].
        "</td><td>".$row["Role"]."</td><td>".$row["Email"]."</td><td>".$row["Username"]."</td></tr>";
?>
        <td>
       <form method="get" action="delete.php">
           <input type="hidden" name="rowid" value="<?php echo $row['id']; ?>">
           <input class="btn-default" type="submit" name="delete" value="Delete">
       </form>
     </td>
<?php
}
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();
?>

如果你能换一双新的眼睛,我会很感激的

谢谢。

试试看{
try {
$conn = new PDO("mysql:host=$servername;dbname=$database", $username, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//obtain the rowid from $_GET
if(isset($_GET['id'])){
$id = ($_GET['rowid']);
}

//sql to delete record.
$sql = "DELETE FROM users WHERE id = ". $id;

$conn->exec($sql);
echo "Record deleted!";
require 'adminPage.php';

} catch(PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
$conn=newpdo(“mysql:host=$servername;dbname=$database”,$username,$pass); $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常); //从$\u GET获取rowid 如果(isset($\u GET['id'])){ $id=($_GET['rowid']); } //sql来删除记录。 $sql=“从用户中删除,其中id=”.$id; $conn->exec($sql); echo“记录已删除!”; 需要“adminPage.php”; }捕获(PDO$e){ echo$sql。“
”$e->getMessage(); } $conn=null;
应该是

//obtain the rowid from $_GET
if(isset($_GET['rowid'])){
$id = ($_GET['rowid']);

    try {
    $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $pass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //sql to delete record.
    $sql = "DELETE FROM users WHERE id = ". $id;

    $conn->exec($sql);
    echo "Record deleted!";
    require 'adminPage.php';

    } catch(PDOException $e) {
    echo $sql . "<br>" . $e->getMessage();
    }
} else {
    echo "error: no row id specified";
}
$conn = null;
//从$\u GET获取rowid
如果(isset($\u GET['rowid'])){
$id=($_GET['rowid']);
试一试{
$conn=newpdo(“mysql:host=$servername;dbname=$database”,$username,$pass);
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
//sql来删除记录。
$sql=“从用户中删除,其中id=”.$id;
$conn->exec($sql);
echo“记录已删除!”;
需要“adminPage.php”;
}捕获(PDO$e){
echo$sql。“
”$e->getMessage(); } }否则{ echo“错误:未指定行id”; } $conn=null;

首先,您的验证在try/catch中,即使没有指定ID,它也会尝试执行;基本上,这是逻辑上的失败。在运行查询之前,请检查该值并确定该值是否存在,因为您正在检查该值,然后不管值是否存在,都会尝试进行查询。第二,您使用的是
if(isset($\u GET['id'))
而不是
if(isset($\u GET['rowid'))

侧注:您能告诉我们为什么在一个代码中使用mysqli,然后在另一个代码中使用PDO吗?这是如何实现的<代码>$\u-GET['id']-如果(isset($\u-GET['id']){$id=($\u-GET['rowid']);}并且您可能打算使用
如果(isset($\u-GET['rowid']){$id=($\u-GET['rowid'])}
-错误报告会让您产生一些问题。似乎是
其中id=“$id好吧,有人发布了我在上面已经发布的内容的答案,并且在它之前的5分钟。你没试过我让你用的吗?然后接受给出的答案。但是,如果您与此一起生活,您可以在这里接受sql注入谢谢您向我解释这一点。我一定会尝试一下。基本上,无论
$\u GET['rowid']
是否存在,您的代码都会运行SQL查询,这将在运行时抛出SQL错误;取而代之的是,用validating if块包围SQL查询,这样它就不会在
$\u GET['rowid']
不存在时运行,也不会抛出SQL错误-相反,它会告诉您
$\u GET['rowid']
不存在感谢您的解释和帮助,它工作成功。:)
//obtain the rowid from $_GET
if(isset($_GET['rowid'])){
$id = ($_GET['rowid']);

    try {
    $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $pass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //sql to delete record.
    $sql = "DELETE FROM users WHERE id = ". $id;

    $conn->exec($sql);
    echo "Record deleted!";
    require 'adminPage.php';

    } catch(PDOException $e) {
    echo $sql . "<br>" . $e->getMessage();
    }
} else {
    echo "error: no row id specified";
}
$conn = null;