2012-03-20 95 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

相關問題