您的原始mysqli代码和PDO代码都不是实际创建任何绑定参数。
你有这个:
$checkRecord = "SELECT * FROM gallery WHERE id_gallery=".$id; $stmt = $con->prepare($checkRecord); $stmt->bindParam(1, $id); $stmt->execute();
毫无疑问,当您请求bindParam()时,PDO会变得混乱,因为您没有将任何参数占位符放入SQL查询中。 “将参数绑定到什么?”它正确的奇迹。
你应该用这个:
$checkRecord = "SELECT * FROM gallery WHERE id_gallery=?"; $stmt = $con->prepare($checkRecord); $stmt->execute([$id]);
更多代码示例可在文档中找到 PDO ::准备() 。
第一个问题,我真的需要运行这个选择吗?我建议下面的代码
include "config.php"; $id = $_POST['id']; if($id > 0){ // Delete record $checkRecord = "DELETE FROM gallery WHERE id_gallery= :id "; $stmt = $con->prepare($checkRecord); $stmt->bindParam(":id", $id, PDO::PARAM_INT); // It executes the delete, if any record is deleted, it will print "Registration deleted" if($stmt->execute()){ echo "Registration deleted"; }else{ echo "Id does not exist"; } } exit;
我也建议总是使用 PDO::PARAM_... ,因为它将为您的应用程序带来更多安全性
PDO::PARAM_...
CPDO ::PARAM_STR C准值字符串,数据,horas CPDO ::PARAM_INT Cparavalores inteiros CDPO:: PARAM_BOOL Cpara valor booleano(true ou false) CPDO :: PARAM_NULL Cvalor nulo(null) CPDO ::PARAM_LOB C代表valores de grande quantidade de dados CPDO ::PARAM_STMT C代表联合国登记处,atualmente n?o suportado por nenhum司机 CPDO::PARAM_INPUT_OUTPUT Cspecificaque um par?metro de entrada e sa dapara 存储过程
CPDO ::PARAM_STR C准值字符串,数据,horas
CPDO ::PARAM_INT Cparavalores inteiros
CDPO:: PARAM_BOOL Cpara valor booleano(true ou false)
CPDO :: PARAM_NULL Cvalor nulo(null)
CPDO ::PARAM_LOB C代表valores de grande quantidade de dados
CPDO ::PARAM_STMT C代表联合国登记处,atualmente n?o suportado por nenhum司机
CPDO::PARAM_INPUT_OUTPUT Cspecificaque um par?metro de entrada e sa dapara 存储过程