我有一个常量,它是一个包含反斜杠\
的字符串。
问题是,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";
答案 0 :(得分:3)
你做了什么,是一个自制的SQL注入。
如前所述,您应该使用prepared statements形式的参数(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);
由于安全性,您应始终使用参数。由于Sql Injection,这些天不使用它是疯狂的。