0

PHP に関する本を読んでいて、レコードを挿入するためのこのコードを見ました。三項演算子のデフォルトの場合の特定の式がわかりません。すなわち:

"'$v',"

著者は一重引用符 (') を使用して間違いを犯したのでしょうか? 彼が本当に意味していたのは、ソーシャル 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',";
    }
}
4

4 に答える 4

1

二重引用符は文字列であることを示し、一重引用符は文字列の一部であることを示します。二重引用符内の変数が評価されるため、文字列には「$v」ではなく変数「vValue」の値が含まれます

于 2013-06-12T20:13:27.573 に答える
1

一重引用符は値をラップします。値が文字列であるかどうかは重要です。

文字列値をラップしないと、すべての単語が予約済みの SQL 単語として解釈されます。

ちなみに、SQL の処理には PDO を使用することをお勧めします: http://www.php.net/manual/en/book.pdo.php

于 2013-06-12T20:14:46.837 に答える
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',";
}

これは実質的に正しいです....三項演算子について詳しくは、こちらをご覧ください::

于 2013-06-12T20:22:49.650 に答える
0

この行:

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

$v の値が数値かどうかを調べます。数値の場合は、その数値に続けてコンマ (,) を $values の値に追加します。数値でない場合は、値を一重引用符で囲み、その後にカンマを付けて $values に追加します。

基本的に、すべて完了したときにステートメントが次のようになっていることを確認しています。

insert into sometable (col1, col2, col3, col4) values (0, 'some string', 'other string', 67, 'etc...')
于 2013-06-12T20:23:44.323 に答える