2017-02-13 6 views
0

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

[HTML]

<html> 
<head> 
    <title>nickname</title> 
</head> 
<body> 
    <p>input nickname</p> 
    <form action="foo.php" method="post"> 
     <input type="text" name="nickname" /> 
     <input type="submit"> 
    </form> 
</body> 
</html> 

[PHP]

//foo.php 
if(isset($_POST['nickname']) && !empty($_POST['nickname'])) { 
    $nickname = $_POST['nickname']; 

    //Object Oriented way 
    $servername = "localhost"; 
    $username = "root"; 
    $password = "foo_bar"; 
    $dbname = "nickname"; 

    //check connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 

    if($conn->connect_error) { 
     die("cannot connect:".$conn->connect_error); 
    } 

    $sql = "SELECT * FROM nickname WHERE nickname='$nickname'"; 
    $result = $conn->query($sql); 

    if($result->num_rows > 0) { 
     echo "nickname exists!"; 
    } else { 
     $sql = "INSERT INTO nickname(nickname) VALUES(".$nickname.")"; 
     $conn->query($sql); 
     echo "welcome $nickname!"; 
    } 

    $conn->close(); 

} else { 
    echo "please input your nickname"; 
} 

Я все еще изучаю, как использовать MySQL, что я делаю неправильно? особенно эта линия

$sql = "INSERT INTO nickname(nickname) VALUES(".$nickname.")"; 
$conn->query($sql); 

данные в переменной не вставлена ​​в таблицу, ничего не происходит. , но если я заменю $nickname на обычный текст, данные будут вставлены.


Почему это дубликат? речь идет даже не о «как предотвратить SQL инъекции»

+0

Вашего сценария находится под угрозой [SQL Injection Attack] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) Посмотрите, что случилось с [Little Bobby Tables] (http://bobby-tables.com/) Даже [если вы (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) Используйте [подготовленные параметризованные утверждения] (http:// /php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

+0

@RiggsFolly спасибо за ответ, да, я должен использовать подготовленные заявления, но разве это решает проблему? Я написал простой сценарий, чтобы просто проверить ... –

+0

@ha_ryu совершенно противоположное, подготовленное заявление - это самое и единственное решение этой проблемы. Это означает, что дублирующее соединение фактически неверно. –

ответ

1

Дайте одиночные кавычки для переменной

$sql = "INSERT INTO nickname(nickname) VALUES('".$nickname."')"; 
$conn->query($sql); 
+0

спасибо! Я делал это неправильно! VALUES ("'. $ Nickname.'"), Но нет ли проблем с моим кодом, если я дважды запрашиваю? или больше? –

+0

Да .. Добро пожаловать. Хорошая удача :) – affaz

+0

этот ответ неправильный –