Почему SQL-запрос не выполняется? - PullRequest
1 голос
/ 20 марта 2012

Этот код является тем, что я пытался обработать запрос, ни удаление, ни вставка не влияют.

Идентификатор правильный, а conn.php правильный.

Я просто копирую SQL-запрос в phpmyadmin для проверки, и он работает.

И я положил echo "test"; между try{}, это тоже эхо.

Спасибо

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

Ответы [ 3 ]

2 голосов
/ 20 марта 2012

Это не работает, потому что для интерполяции переменных вам нужно использовать двойные кавычки ("), а не одинарные. Кавычки заставляют его буквально передавать" $ id "вместо значения.

Но так как вы используете PDO, вы должны использовать подготовленные операторы! Например:

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

Значение $id заменяет ?

EDIT: исправлен параметр

1 голос
/ 20 марта 2012

использование одинарных кавычек в 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 голосов
/ 20 марта 2012

Какой из запросов не выполняется? Можете ли вы проверить, есть ли соединение вообще (значит, ваши учетные данные верны)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...