MySQL и PHP избегают обратной косой черты

У меня есть константа, которая является строкой, которая содержит обратную косую черту \,

Проблема в том, что MySQL, похоже, экранирует этот символ, что не соответствует ожидаемому поведению.

Вот код:

const METHOD_TYPE_CREDITCARD = "Braintree\CreditCard";

$sql = "SELECT transaction_id AS id,
CASE
WHEN source_type = '0' THEN '".PaymentGateway::METHOD_TYPE_CREDITCARD."'
END AS source
FROM transactions WHERE invoice_id = :id"

Он уверен, что выполняет запрос правильно, но избегает \, Итак, вывод выглядит так:

[id] => myx0kpe8
[source] => BraintreeCreditCard

Я попробовал то, что упомянул @strawberry. Все те же результаты с

const METHOD_TYPE_CREDITCARD = "Braintree\\CreditCard";

1

Решение

То, что вы сделали, это самодельный SQL-инъекция.

Как уже говорилось, вы должны использовать параметры в виде готовые заявления (PDO или эквивалент в mysqli) вместо конкатенации строк.

$stmt = $dbh->prepare("SELECT transaction_id AS id,
CASE
WHEN source_type = '0' THEN ':creditcard'
END AS source
FROM transactions WHERE invoice_id = :id");
$stmt->bindParam(':creditcard', PaymentGateway::METHOD_TYPE_CREDITCARD);

Вы всегда должны использовать параметры из-за безопасности. Это безумие, чтобы не использовать его в эти дни, из-за Впрыска.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector