我正在阅读一本关于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',";
}
}
答案 0 :(得分:1)
双引号表示它是一个字符串,单引号是字符串的一部分。 内部双引号变量被计算,因此字符串将包含变量'vValue'而不是'$ v'的值
答案 1 :(得分:1)
单引号包装你的价值。如果值是String,那很重要。
如果不包装String-value,则每个单词都将被解释为保留的SQL单词。
顺便说一句,我建议使用PDO处理SQL内容:http://www.php.net/manual/en/book.pdo.php
答案 2 :(得分: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 ::
的更多信息答案 3 :(得分: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...')