我是新来的MySQL和PHP,并想澄清编写的语句的东西。
我见过的所有示例只添加实际数据PARAMS在表中,这是不好的做法,paramaterise所有的字段,以便有较少的语句? 例如
UPDATE ? SET ?=? WHERE ID=?
谢谢
我是新来的MySQL和PHP,并想澄清编写的语句的东西。
我见过的所有示例只添加实际数据PARAMS在表中,这是不好的做法,paramaterise所有的字段,以便有较少的语句? 例如
UPDATE ? SET ?=? WHERE ID=?
谢谢
你不能参数标识。 您只能参数数据 。 否则,参数化的要点, 声明结构和数据之间的分离,是很没有实际意义。 记者了解到,参数不只是看中复制和粘贴,这是确保数据库具有静态部分之间的明确分离(它会从它的指令)和动态部分(它会当作数据的技术和只有数据)。
个人而言,我真的不明白,为什么每个人都试图尽可能减少SQL,不想写任何。 在现实世界中的应用程序有SQL查询,应用程序将发送给数据库的定义,数量有限 。 还有的将是一个查询找到用户名的用户,一个计算FOOS的数量在酒吧桌等等,等等,一旦写这些查询,长手。 有一个方法findUserByName()
其中包含查询,发现在SQL写出名的用户的地方。 你并不需要动态地凑齐每一个查询,你只需要编写一次。 这也为您提供了所有可能的数据库交互的一个很好的“库存”,并允许手工的调整必要。 </rant>
所以,这既是不可能的和误导性的。
虽然优秀的deceze的回答涵盖了您的问题从字面上看,有别的东西就更不用说了。
如果你看看任何重大freamework,你会发现它工作得同样的方式功能...更新():
function update($table, $data, $id) {
因此,该方法是在一般颇为流行。
然而,这是错误的,误导的为好。
最初被僵化,它很快变得无法使用:
所有这些情况将开始小和整洁的功能为臃肿的怪物。
不过补救办法很简单。
你真正需要的是一个可以被添加到查询的每个数据类型的占位符 。 所以,欢迎SafeMysql -这将实现你的梦想库:
$db->query("UPDATE ?n SET ?u WHERE id=?i", $table, $data, $id);
它是做你想要什么,但做正确的方式。 即使如此复杂的查询将不会作出任何麻烦:
$data = array('field'=>$value,'field2'=>$value);
$ids = array(1,2,4);
$sql = "UPDATE t SET ts=unix_timestamp(), ip=inet_aton(?s),?u WHERE id IN(?a)";
$db->query($sql, $ip, $data, $ids);
虽然它的目的不是为了"less [SQL] statements"
,但写更少的PHP代码,使您的查询的安全 ,同时保持熟悉的传统的SQL,无需取舍喜欢学习一些查询生成新的语言,它仅仅是一个SQL方言用PHP编写的。
是的,显然是因为它是无法读取。 即使有价值观,我认为最好是在关键的形式占位符。 例如
UPDATE mytable SET `name`=:fullname WHERE ID=:id