2012-03-20 27 views
1

このコードは、クエリを処理しようとしているもので、削除または挿入すると影響がありません。なぜSQLクエリが実行されないのですか?

idは正しいですが、conn.phpは正しいです。

私はphpMyAdminにSQLクエリをコピーしてテストするだけで動作します。

そしてecho "test";try{}の間に置きます。

は私が

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

やエラーを追加しましたあなたの

<? 
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>"; 

?> 

ありがとう補間する変数のためのために、あなたは、二重使用する必要があるので、それは動作しません

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

PDOを使用していることは素晴らしいですが、パラメータ化されたクエリを使用していない場合でも、セキュリティのギャップは非常に大きくなります。 – lonesomeday

答えて

2

です単一引用符ではなく、文字通り値の代わりに "$ id"を渡します。

しかし、PDOを使用しているので、準備された文を使用する必要があります。このように:

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

$idの値は?

EDITを置き換える:実行されないクエリのパラメータ

+0

thx、二重引用符が理由ではありません。私は変更され、まだ動作しません –

0

を固定しましたか?接続があるかどうかを確認できますか(つまり、資格情報が正しいことを意味しますか?)問題がある可能性がありますPHPでの単一引用符を使用して

+0

すべてのクエリは動作しません、データベースへの接続は正しいです、私はちょうど –

1

ここ
$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

を挿入しようとする別のPHPを使用して、二重引用符が理由ではありません。私は変更され、それでも動作しません –

+0

警告:PDOStatement :: execute()は、パラメータ化された文のために、行1のC:\ xampp \ htdocs \ fyp \ list \ delete.phpで与えられた配列、 $ stmt-> execute(array($ id))に変更します。 –

+0

@LeoChan - はいあなたの権利私はパラメータで適切なことをするラッパーを持っていることを忘れています。彼らは配列である必要があります。私の例を反映するように修正しました。 – Cfreak

関連する問題