当我为MySQL编写查询时,通常使用这样的表单:
$column= "column_name";
$query = "SELECT * FROM table_name WHERE \"".$column."\"" = \"some_value\" ";
如果我想避免使用\“”。变量的序列,我可以使用其他形式,还是可能存在一些兼容性问题或其他一些问题?
$column= "column_name";
$query = "SELECT * FROM table_name WHERE \"$column\" = \"some_value\";
答案 0 :(得分:4)
在这两种情况下你所做的都很好,但有一些注意事项:
1)你在第一种形式中所做的是使用像字符串文字这样的字符串,这意味着你可以/应该使用单引号而不是双引号,因为它们的解析速度要快得多。
$column = 'column_name';
$query = 'SELECT * FROM table_name WHERE ' . $column . ' = "some_value"';
你在第二个例子中所做的也很好,它只取决于你试图避免使用转义字符的原因,但如果你只是为了可读性而做,那你有什么很好。
值得注意的是,处理查询的方式正在被弃用,你应该看看PDO并以这种方式注入你的值。
按上方评论 - 从列中删除“
答案 1 :(得分:2)
是的,你可以。
示例强>
$variable = 1;
$array = array( 1,2 );
$object = new stdclass();
$object->member = 1;
$string = "You can basically put every kind of PHP variable into the string. This can be a simple variable {$variable}, an array {$array[0]} or an object member {$object->member} even object methods.";
如果您希望PHP在没有解释的情况下从字面上取$variable
,请将字符串放入单引号中。
我真正想用于查询的另一种方法是heredoc符号
$sqlQuery = <<< EOQ
SELECT
"field"
FROM
"table"
WHERE
"id" = '{$escapedValue}'
EOQ;
再补充一点:
在SQL中,您应该使用单引号分隔值,并使用双引号(ANSI兼容)或后面勾选```
来标识表名和字段名等标识符