2014-10-02 58 views
0

。下面是我得到了什麼,當我嘗試引用一個字符串LARAVEL getPdo() - >報價添加斜線,而不是引用另一個報價

$string = "Because I'm happy"; 
$quoted = DB::connection()->getPdo()->quote($string) 
// Return 'Because I\'m happy' instead of 'Because I''m happy' 

爲什麼?請告訴我?!

我的數據庫聯接是

'connections' => array(
    'mysql' => array(
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'database' => 'mytable', 
    'username' => 'root', 
    'password' => '', 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
    ), 

回答

0

這是因爲您從PDO類在一根繩子上運行quote方法。

如果你看看PHP manual,你會發現它在字符串的開頭和結尾放置了單引號,所以它需要轉義字符串中的所有其他單引號。

+0

在PHP手冊上,你得到了一個在字符串中帶有引號的例子,它將它加倍。在我的情況下,它在引用之前添加了一個\我只是不明白爲什麼 – ChokkanWeb 2014-10-03 06:02:48

1

您爲轉義而不是''而不是''的原因是您正在使用不同的數據庫:手冊中的示例中使用了mysql vs sqlite。

轉義由數據庫驅動程序提供。

所以,sqlite的,正確的方法是將報價翻倍:https://www.sqlite.org/faq.html#q14

但在MySQL中,這是一個反斜槓:http://dev.mysql.com/doc/refman/5.7/en/string-literals.html

及相關PDO數據庫驅動程序不正確的事情數據庫您正在使用。除了(如手冊中所述)數據庫中沒有實現quote()方法的情況。最好的方法是準備好語句,這意味着您不需要根據值處理轉義。