PDO SQL введите текстовое поле с "и" - PullRequest
0 голосов
/ 04 октября 2018

Попытка выполнить запросы вставки как ", так и"

У меня есть $description = addslashes($description);

Но я все еще получаю:

SQLSTATE [42000]:Синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в вашем синтаксисе SQL; проверьте правильность синтаксиса для руководства, соответствующего вашей версии сервера MySQL, около «27», «Product

$description равно "Capacity:26\",27\" and 700C Wheel Sizes" после addslashes().

Запрос:

$handler->query('INSERT INTO `tm_products`
            (`title`, `description`, `member_name`, `category_path`) 
    VALUES ("'.$apiGetListing['Title'].'",
            "'.$description.'","'.$member_name.'",
            "'.$apiGetListing['CategoryPath'].'")');

Я думаю, что он пытается завершить запрос на 26\" "?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Несколько предложений:

1-использовать синтаксис heredoc для большей читабельности:

Пример:

$query = <<<SQL
    INSERT INTO `tm_products`
    (`title`, `description`, `member_name`, `category_path`) VALUES 
    (
        "{$apiGetListing['Title']}", 
        "$description", 
        "$member_name", 
        "{$apiGetListing['CategoryPath']}"
    )
SQL;

использовать {} для массива

2-связывание с pdo param по соображениям безопасности

$query = "SELECT * FROM table WHERE something = ?";
$stmt = $db->prepare($query);
$stmt->execute(array($id));
0 голосов
/ 04 октября 2018

Вам действительно нужно санировать ваши аргументы.Вы открыты для SQL-инъекций.

    <?php
    $servername = "localhost";
    $username = "";
    $password = "";
    $dbname = "";

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

    $stmt = $conn->prepare("INSERT INTO tm_products(title, description, member_name, category_path) VALUES(?, ?, ?, ?))");
    $stmt->bind_param("ssss", $title, $description, $member_name, $category_path);

    $title= $apiGetListing['Title'];
    $description= $description;
    $member_name= $member_name;
    $category_path = $apiGetListing['CategoryPath'];

    $stmt->execute();

    $stmt->close();
    $conn->close();
0 голосов
/ 04 октября 2018

Попробуйте выполнить запрос с параметрами.

   $handler->query('INSERT INTO tm_products(title, description, member_name, category_path) VALUES
    (:title, :description, :member_name, :cat_path)', array('title'=>$apiGetListing['Title'],'description'=>$description,'member_name'=>$member_name,'cat_path'=>$apiGetListing['CategoryPath'])) 

ИЛИ вы можете просто поместить переменные в запрос следующим образом:

"VALUES ('$apiGetListing[Title]','$description','$member_name','$apiGetListing[CategoryPath]'));"

Обратите внимание, что вам не нужно ставить "" включ массива, если вы делаете это таким образом.

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