У меня есть константа, которая является строкой, которая содержит обратную косую черту \
,
Проблема в том, что 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";
То, что вы сделали, это самодельный 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);
Вы всегда должны использовать параметры из-за безопасности. Это безумие, чтобы не использовать его в эти дни, из-за Впрыска.
Других решений пока нет …