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

双引号表示它是一个字符串,而单引号是字符串的一部分。内部双引号变量被评估,因此字符串将包含变量 'vValue' 而不是 '$v' 的值

于 2013-06-12T20:13:27.573 回答
1

单引号包含您的价值。如果值是字符串,这一点很重要。

如果您不包装字符串值,则每个字都将被解释为保留的 SQL 字。

顺便说一句,我建议使用 PDO 来处理 SQL 内容: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 回答