2017-07-02 97 views
0

我想将VCARD信息作为长文本字符串加载到数据库字段中。在某些情况下,vcard信息带有一个以“$ _”结尾的参数(参见倒数第二行)。我不能让PHP把这个变量作为字符串来逃避它。

`$vcard = mysqli_real_escape_string($connection, "BEGIN:VCARD 
    VERSION:3.0 
    FN:Your Name 
    N:Name;Your;;; 
    EMAIL;TYPE=INTERNET;TYPE=WORK:[email protected] 
    TEL;TYPE=CELL: 
    ADR;TYPE=HOME:;;I am here;;;; 
    ORG:Your organization 
    TITLE:Owner and Co-Creator 
    item1.URL:https\://yoursite.com 
    item1.X-ABLabel:_$!<HomePage>!$_ 
      END:VCARD");` 

我收到“Notice:Undefined variable:_in C:”错误。我可以手动转义第二个$但是失败的目的。我尝试了metaquote(),那也不起作用。任何帮助我如何避免这个错误?

+0

你在用这个字符串做什么?它是如何包装的? – RiggsFolly

+0

我正试图在数据库中存储vcard信息,所以我可以在飞行中生成一个vcard文件 –

回答

0

用单引号替换双引号。插入双引号内的变量,而不是当它们位于单引号内时。

$vcard = mysqli_real_escape_string($connection, 'BEGIN:VCARD 
    VERSION:3.0 
    FN:Your Name 
    N:Name;Your;;; 
    EMAIL;TYPE=INTERNET;TYPE=WORK:[email protected] 
    TEL;TYPE=CELL: 
    ADR;TYPE=HOME:;;I am here;;;; 
    ORG:Your organization 
    TITLE:Owner and Co-Creator 
    item1.URL:https\://yoursite.com 
    item1.X-ABLabel:_$!<HomePage>!$_ 
      END:VCARD'); 
+0

这就是在黑暗中的一个飞跃。你怎么知道OP在做什么?此外,即使 [如果你是逃避投入,它不安全!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) 使用[准备参数化语句](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

+1

看起来像引用文本中没有参数,所以没有做SQL注入的可能性。一切都是硬编码的。 – Adrien