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;