2012-03-20 64 views
1

这段代码就是我试图处理查询的时候,删除或插入都没有影响。为什么sql查询不执行?

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 
+2

这是伟大的,你使用的PDO,但如果你不使用参数化查询,你还是留下一个巨大的安全漏洞。 – lonesomeday 2012-03-20 18:13:44

回答

2

它不会为了工作,因为对于要插入变量,你需要使用双引号(“)不是单引号。单引号使它实际上传递”$ id“而不是值。

但由于您使用的PDO,你应该使用预处理语句!就像这样:

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

$id值替换?

编辑:固定没有得到执行哪个查询参数

+0

thx,双引号不是原因。我改变了,它仍然不起作用 – 2012-03-20 18:24:49

0

?你能检查是否有连接(意思是你的凭证是正确的)?

+0

每个查询不起作用,连接到数据库是正确的,我只是用另一个php试图插入 – 2012-03-20 18:23:21

1

使用PHP的单引号可能是问题:

$sql = 'INSERT INTO delete_user_list SELECT * FROM user_list WHERE ListID=$id'; 

这里,$ id将不会被因为单引号PHP解释是“原始字符串”,如果你想

解决$ id来解决,用“(双引号)

$sql = "INSERT INTO delete_user_list SELECT * FROM user_list WHERE ListID=$id"; 

或使用参数化的语句(首选&更安全)

$sql = "INSERT INTO delete_user_list SELECT * FROM user_list WHERE ListID=?"; 
$stmt = $conn->prepare($sql); 
$stmt->execute($id); 
+0

thx,双引号不是原因。我改变,它仍然无法正常工作 – 2012-03-20 18:24:34

+0

也警告:PDOStatement对象::执行()预计参数1是数组,在C整数给出:\ XAMPP \ htdocs中\ FYP \目录\对参数化语句线12 delete.php,所以我更改为$ stmt-> execute(array($ id)); – 2012-03-20 18:26:50

+0

@LeoChan - 是的,你的权利我忘了我有一个包装器,它能够正确地处理参数。他们需要成为一个数组。修正了我的例子来反映。 – Cfreak 2012-03-20 18:48:51

相关问题