Php 我无法使用PDO过程更新数据中的状态行
我在使用PDO过程更新mysql表中的状态行时遇到了麻烦。表中的状态行定义为0,因此每当我按下确认按钮时,我希望它变为1,但它不能,并且我整晚都在尝试修复它,但我不能 这是我的数据库连接Php 我无法使用PDO过程更新数据中的状态行,php,mysql,pdo,Php,Mysql,Pdo,我在使用PDO过程更新mysql表中的状态行时遇到了麻烦。表中的状态行定义为0,因此每当我按下确认按钮时,我希望它变为1,但它不能,并且我整晚都在尝试修复它,但我不能 这是我的数据库连接 <?php class Database { private $host = "localhost"; private $db_name = "jerrydb"; private $username = "root"; private $password = "";
<?php
class Database
{
private $host = "localhost";
private $db_name = "jerrydb";
private $username = "root";
private $password = "";
public $conn;
public function dbConnection()
{
$this->conn = null;
try
{
$this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $exception)
{
echo "Connection error: " . $exception->getMessage();
}
return $this->conn;
}
}
?>
这是我的脚本,我想确认消失,每当我点击它,同时改变状态行为1
<?php
if (isset($_GET['entity']) && isset ($_GET['action']) && isset($_GET['user_id'])){
$entity = mysqli_real_escape_string($db, $_GET['entity']);
$action = mysqli_real_escape_string($db, $_GET['action']);
$user_id = mysqli_real_escape_string($db, $_GET['user_id']);
$query = "UPDATE jerrydb set status = '1' WHERE user_id='$user_id'";
$db->query($query);
}
$query = "SELECT * FROM jerrydb WHERE status='0' ORDER BY user_id DESC";
$jerrydb = $db->query($query);
?>
<?php if($row = $jerrydb->fetch_assoc()) { ?>
<tr>
<td><a href="index.php?entity=go&action=approve&id=<?php echo $row['id'];?>" class="btn btn-success">Confirm</a> </td>
</tr>
<?php } ?>
您实际上使用的是PDO,因此在使用PDO时,无需使用这些mysqli\u real\u escape\u string
来准备bind,execute语句
<?php
if (isset($_GET['entity']) && isset($_GET['action']) && isset($_GET['user_id'])) {
$entity = $_GET['entity'];
$action = $_GET['action'];
$user_id = $_GET['user_id'];
$query = $conn->prepare("UPDATE jerrydb SET status = '1' where user_id = ? ");
if ($query->execute([$user_id])) {
echo "status updated";
} else {
echo "not";
}
}
$query = $conn->prepare("SELECT * FROM jerrydb WHERE status='0' ORDER BY user_id DESC");
$query->execute();
$jerrydb = $query->fetchall(PDO::FETCH_ASSOC);
if (count($jerrydb) > 0) { // we have results
foreach ($jerrydb as $key => $row) {
}
?>
<tr>
<td><a href="index.php?entity=go&action=approve&id=<?php
echo $row['id'];
?>" class="btn btn-success">Confirm</a> </td>
</tr>
<?php
}
?>
我已经查看了sql注入的所有答案,但我想不出答案,如果我的代码能被修改,我会很高兴的。我是网络开发新手。谢谢你用错误的链接结束了另一个问题。这与sql注入无关,只是混合了不同的mysql API,并且没有使用正确的连接变量。这家伙什么时候能学会?我重新打开了这个问题。如果使用pdo,您需要使用bindParam并执行步骤。不建议直接运行查询。您能发布更新的var_dump($query)结果吗,这样您就可以知道生成了什么查询了。谢谢您,先生,我已经通过“不同的mysql API和不使用正确的连接变量”这一技巧解决了这个问题。非常感谢您。我很感激