2013-06-12 35 views
0

我正在讀一本關於PHP和看到了插入記錄此代碼。我不明白三元運算符默認情況下的特定表達式。更具體地講:PHP的MySQL的雙引號不是單引號

"'$v'," 

難道讓筆者用單引號(')和一個錯誤是他的本意是反引號(')引用一個soecial MySQL的表達?爲什麼你會使用單引號,然後對變量使用雙引號?

據MySQL文檔:

「的標識符引號字符是反引號(‘`’):」 http://dev.mysql.com/doc/refman/5.0/en/identifiers.html

public function insertRecords($table, $data){ 
    //setup some variables for fields and values 
    $fields = ""; 
    $values = ""; 

    //populate them 
    foreach($data as $f => $v){ 
     $fields .= "`$f`,"; 
     $values .= (is_numeric($v) && (intval($v) == $v)) ? $v . "," : "'$v',"; 
    } 
} 
+0

單引號是DB querry – 2013-06-12 20:09:56

+0

的一部分,而不是作爲一個標識符,但作爲一種價值......標識符名稱像表和字段的數據庫實體...值需要包裹在素數(「'」)字符中。 – Orangepill

+0

與值('string','string');?我想我現在明白了。 –

回答

1

雙引號表示,這是一個字符串和單引號字符串的一部分。 裏面的雙引號變量被評估,所以字符串將包含變量'vValue'的值不'$ v'

1

單引號包裝你的價值。如果該值是一個字符串,這很重要。

如果不換行字符串值,每一個字將被解釋爲一個SQL保留字。

順便說一句,我建議使用PDO來處理SQL的東西:http://www.php.net/manual/en/book.pdo.php

0

注意,在使用(is_numeric($v) && (intval($v) == $v)) ? $v . "," : "'$v',";雙引號" "指的是三元操作裏面的值。

`$values.=((is_numeric($v) && (intval($v) == $v)) ? $v . "," : "'$v',";` 

是相同的話說:

if((is_numeric($v) && (intval($v) == $v)) { 
$values.= $v . ","; 
}else{ 
$values.="'$v',"; 
} 

這實際上是正確的.... 您可以瞭解更多關於三元運營商here ::

0

這條線:

$values .= (is_numeric($v) && (intval($v) == $v)) ? $v . "," : "'$v',"; 

查看是否就$ v值是一個數字或沒有。如果它是一個數字,則將該數字後跟一個逗號(,)作爲$ values的值。如果它不是一個數字,那麼它將該值包裝在單引號中,後跟逗號並將其附加到$值。

基本上你是確保你的聲明是這樣的,當這一切都完成:

insert into sometable (col1, col2, col3, col4) values (0, 'some string', 'other string', 67, 'etc...')