2013-06-12 42 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...')