2016-03-09 6 views
0

Может кто-то пожалуйста, xplain мне, почему этот код, чтобы вставить новую книгу в моей БД получает эту ошибку:странно ошибка при попытке вставить строку в БД

ERROR: Could not able to execute INSERT INTO books (Email, Name, Price) VALUES ([email protected], Jack turell's guide to life, $100). You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@mail.yu.edu, Jack turell's guide to life, $100)' at line 2

session_start(); 
$book = $_POST["book"]; 
//$condition = $_PST["condition"]; 
$price = $_POST["price"]; 
$email = $_SESSION["email"]; 

    $book = $link->real_escape_string($book); 
    $price = $link->real_escape_string($price); 
    $email = $link->real_escape_string($email); 

    // Create connection 
    $link = mysqli_connect($servername, $username, $password, $dbname); 
    // Check connection 
    if($link === false){ 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
    } 


    if($email===null){ 
     header("Location: http://yutradecircle.com/index.html"); 
    } 
    else{ 
     $sql = "INSERT INTO books (Email, Name, Price) 
     VALUES ('{$email}', '{$book}', '{$price}')"; 

    if (mysqli_query($link, $sql)) { 
     echo "New record created successfully</br><a   href='tradecircle.php'>Home</a>"; 
     } else { 
      echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
     } 

    } 
    mysqli_close($link); 
+0

Строковые значения нужны одинарные кавычки. –

+0

если ваша проблема решена, любезно признайте лучший ответ и отметьте как принято. Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – devpro

ответ

1

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

$book = $link->real_escape_string($book); 
$email = $link->real_escape_string($email); 
$price = $link->real_escape_string($price); 

И потом:

$sql = "INSERT INTO books (Email, Name, Price) VALUES ('$email', '$book', '$price')"; 

В общих строительных строк, как это проблема безопасности. Отметьте PDO и строковые вставки с ним или аналогичную библиотеку, которая предотвращает SQL-инъекцию.

+0

Я добавил оба ваших предложения, но он все еще не работает. Я проверяю свой журнал ошибок, и это новая ошибка: PHP Неустранимая ошибка: вызовите функцию-член real_escape_string() на не-объект в /home/ypemgm/public_html/yutradecircle.com/addBook.php в строке 8. и строки 8-10 - это ваше предложение по 3 линиям. – KosherHMM

+0

Обновите свой вопрос, как выглядит ваш код сейчас, и я могу посмотреть. – MajicBob

+0

Также я получаю эти две другие ошибки все время, которые упоминают pdo sqlite. PHP Предупреждение: не удается загрузить модуль 'pdo_sqlite', потому что требуемый модуль 'pdo' не загружен в Unknown в строке 0 – KosherHMM

0

Вы должны использовать кавычки для строки значения, как:

$sql = "INSERT INTO books (Email, Name, Price) VALUES ('$email', '$book', '$price')"; 
Смежные вопросы