MySQL和PHP逃避了斜线

时间:2017-01-20 07:21:58

标签: php mysql

我有一个常量,它是一个包含反斜杠\的字符串。

问题是,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 个答案:

答案 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,这些天不使用它是疯狂的。