php - 为什么sql查询不执行?

标签 php mysql pdo

这段代码是我尝试处理查询的代码,删除或插入都没有影响。

id 正确,conn.php 正确。

我只是将 sql 查询复制到 phpmyadmin 进行测试,它有效。

我在 try{} 之间放了一个 echo "test"; 它也回显了。

谢谢

<?
include("../connection/conn.php");
session_start();

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// list out the pervious create list
//$id=$_GET['id'];

$id=3;
try{
$sql = 'INSERT INTO delete_list SELECT * FROM list WHERE ListID=?';
$stmt = $conn->prepare($sql);
$stmt->execute(array($id));
}
catch(PDOException $e)
    {
    die ($e->getMessage().'<a href="view.php"> Back</a>'); 
    }

try{
$sql = 'INSERT INTO delete_user_list SELECT * FROM user_list WHERE ListID=?';
$stmt = $conn->prepare($sql);
$stmt->execute(array($id));
}
catch(PDOException $e)
    {
    die ($e->getMessage().'<a href="view.php"> Back</a>'); 
    }

try{
$sql = 'INSERT INTO delete_require_attributes SELECT * FROM require_attributes WHERE ListID=?';
$stmt = $conn->prepare($sql);
$stmt->execute(array($id));
}
catch(PDOException $e)
    {
    die ($e->getMessage().'<a href="view.php"> Back</a>'); 
    }

try{
$sql = 'INSERT INTO delete_subscriber SELECT * FROM subscriber WHERE ListID=?';
$stmt = $conn->prepare($sql);
$stmt->execute(array($id));
$count=$stmt->rowCount();
}
catch(PDOException $e)
    {
    die ($e->getMessage().'<a href="view.php"> Back</a>'); 
    }

try{
$sql = 'INSERT INTO delete_list_sub SELECT * FROM list_sub WHERE ListID=?';
$stmt = $conn->prepare($sql);
$stmt->execute(array($id));
}
catch(PDOException $e)
    {
    die ($e->getMessage().'<a href="view.php"> Back</a>'); 
    }


    try{
$sql = 'DELETE FROM list WHERE ListID = ?';
$stmt = $conn->prepare($sql);
$stmt->execute(array($id));
}
catch(PDOException $e)
    {
    die ($e->getMessage().'<a href="view.php"> Back</a>'); 
    }

echo "The list has been deleted.".$count." subscribers has been removed. <a href='view.php'> Back</a>";

?>

我加了

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

错误是

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ListID' in 'where clause' Back

最佳答案

它不起作用,因为为了对变量进行插值,您需要使用双引号 (") 而不是单引号。单引号使它按字面意思传递“$id”而不是值。

但是由于您使用的是 PDO,因此您应该使用准备好的语句!像这样:

$sql = 'INSERT INTO delete_list SELECT * FROM list WHERE ListID=?'
$stmt = $conn->prepare($sql)
$stmt->execute(array($id));

$id 的值替换了 ?

编辑:修改参数

关于php - 为什么sql查询不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9792534/

相关文章:

php - 我可以在 SQL 中使用 AND 运算符 2 次吗?

MySQL仅在语句被验证时才执行查询

php - SQLSTATE[HY093] : Invalid parameter number (parameters not match)

php - 在带有 mysql 的 php 中,您可以将 $var 替换为 :var?

php - 资源访问锁PHP

php - Yii2 db getStats(db查询数)

php - Yii2在sql查询中使用 "AS variable"并将其显示在 View 中

php - PHP 中的 while(true) 和 for(;;) 有什么区别?

php - 我可以在 PHP 中混合使用 MySQL API 吗?

PHP PDO execute() 返回重复结果