2013-05-28 5 views
-3

При использовании PHP и MySQL, я применил УДАЛИТЬ команду:DELETE команда SQL

$query="DELETE FROM email_list WHERE email ="."$email"; 
mysqli_query($dbc,$query); 

Это не сработало. Но когда я ставлю это так:

$query="DELETE FROM email_list WHERE email ='$email'"; 
mysqli_query($dbc,$query); 

Это работает. Я хочу знать, почему конкатенация не работает. Здесь $ dbc - это моя база данных и электронная почта электронной почты электронной почты, которую я хочу удалить, а email_list - моя таблица в таблице базы данных dbc.

+2

Конкатенация действительно работает; но вам все равно нужны одинарные кавычки вокруг '$ email' в готовом запросе. Они отсутствуют в первом. – andrewsi

ответ

5

Ну ваши первые результаты строительства в запросе, как это:

DELETE FROM email_list WHERE email [email protected] 

И ваши вторые результаты в:

DELETE FROM email_list WHERE email ='[email protected]' 

Так вы скажите!

2

Ваша конкатенация не работает, потому что ей не хватает одиночных кавычек. Правильный путь был бы сделать это следующим образом:

$query="DELETE FROM email_list WHERE email = '" . $email . "'"; 
mysqli_query($dbc,$query); 

Что действительно небезопасно и ломается, если $email содержит одиночные кавычки.

Защита от инъекции SQL

Поскольку вы уже используете mysqli вы должны изменить свой запрос на подготовленное заявление:

/* create a prepared statement */ 
if ($stmt = $mysqli->prepare("DELETE FROM email_list WHERE email = ?")) { 
    /* bind parameters for markers */ 
    $stmt->bind_param("s", $email); 

    /* execute query */ 
    $stmt->execute(); 

    /* close statement */ 
    $stmt->close(); 
} 

Подробнее here.

Это немедленно защищает ваш скрипт от SQL injection и избавляет вас от необходимости избегать кавычек.

+1

+1 для упоминания SQL-инъекции. Как есть, этот скрипт выглядит очень опасным. – iamnotmaynard

2

Вы пропустили одинарные кавычки в своем первом запросе. Таким образом, при условии, $email содержит значение [email protected], то $query evalutated к:

DELETE FROM email_list WHERE email [email protected] 

Вы должны были бы поставить его, как это правильно:

$query="DELETE FROM email_list WHERE email ='"."$email'"; 
$query="DELETE FROM email_list WHERE email ="."'$email'"; 
1
$query = "DELETE FROM email_list WHERE email = '".$email."'"; 
mysqli_query($dbc,$query); 

Вы должны поставить строки в запросе в кавычках, но вам не нужны котировки для согласования переменной

1

$email содержит, вероятно, строку, которая должна быть w постучал в кавычки. Вы делали некоторые кавычки, но прямо вокруг имени переменной, что мало помогает.

неправильно:

$query="DELETE FROM email_list WHERE email ="."$email"; 

право:

$query="DELETE FROM email_list WHERE email ='".$email."'"; 
0

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

$foo = "harry " . "styles"; 
echo $foo 

Только выходы harry styles. В MySQL вам нужна команда ... WHERE email = 'email_address';, поэтому вам необходимо убедиться, что строка правильно создана!

Ознакомьтесь с страницей руководства PHP http://php.net/manual/en/language.operators.string.php, которая продолжается о конкатенации строк.