[英]How to neatly “build” large sql queries made up of a large number of variables
首先,对不起,是否已经有人问过这个问题。
我环顾四周,但找不到任何答案,或者也许我搜索时使用了错误的单词。
我有一个长的SQL查询,需要使用PHP执行。 它需要大量变量进行更新。
这就是我的意思:
$user = json_decode($stringWithJson);
$reallyLongSqlQuery = "UPDATE `profile` SET `userid` = '{$user->userid}', `name` = '{$user->username}', `lastlogoff` = '{$user->userlastlogoff}', `profileurl` = '{$user->userprofileurl}', `avatar` = '{$user->useravatar}', `avatarmedium` = '{$user->useravatarmedium}', `useravatarfull` = '{$user->useravatarfull}', `state` = '{$user->userprofilestate}', `realname` = '{$user->userrealname}', `timecreated` = '{$user->userprofilecreatedunix}' WHERE `id` = 1;";
mysql_query($reallyLongSqlQuery);
一切正常,但是一行代码很多。 有什么办法可以tidy
吗?
例:
$reallyLongSqlQuery = "UPDATE `profile` SET `userid` = '" . $user->userid .
"', `name` = '" . $user->username .
"', `lastlogoff` = '" . $user->userlastlogoff .
"', `profileurl` = '" . $user->userprofileurl .
"', `avatar` = '" . $user->useravatar .
"', `avatarmedium` = '" . $user->useravatarmedium .
"', `useravatarfull` = '" . $user->useravatarfull .
"', `state` = '" . $user->userprofilestate .
"', `realname` = '" . $user->userrealname .
"', `timecreated` = '" . $user->userprofilecreatedunix .
"' WHERE `id` = 1;";
这并不能一网打尽,但在我看来,它看起来甚至更混乱。
我想过的另一种方法是预先定义所有变量,就像这样:
$userid = $user->userid;
$username = $user->username;
$userlastlogoff = $user->userlastlogoff;
$userprofileurl = $user->userprofileurl;
$useravatar = $user->useravatar;
$useravatarmedium = $user->useravatarmedium;
$useravatarfull = $user->useravatarfull;
$userprofilestate = $user->userprofilestate;
$userrealname = $user->userrealname;
$userprofilecreatedunix = $user->userprofilecreatedunix;
$reallyLongSqlQuery = "UPDATE `profile` SET `userid` = '{$userid}', `name` = '{$username}', `lastlogoff` = '{$userlastlogoff}', `profileurl` = '{$userprofileurl}', `avatar` = '{$useravatar}', `avatarmedium` = '{$useravatarmedium}', `useravatarfull` = '{$useravatarfull}', `state` = '{$userprofilestate}', `realname` = '{$userrealname}', `timecreated` = '{$userprofilecreatedunix}' WHERE `id` = 1;";
再次,这可以正常工作,但是必须有一种更简单(更整洁)的方法来执行此操作。
有人有解决办法吗?
当然,您应该使用绑定,而不是简单的查询字符串,但是在您的情况下,数组可能会有所帮助:
$data['userid'] = $user->userid;
$data['name'] = $user->username;
$data['lastlogoff'] = $user->userlastlogoff;
$data['profileurl'] = $user->userprofileurl;
$data['avatar'] = $user->useravatar;
$data['avatarmedium'] = $user->useravatarmedium;
$data['useravatarfull'] = $user->useravatarfull;
$data['state'] = $user->userprofilestate;
$data['realname'] = $user->userrealname;
$data['timecreated'] = $user->userprofilecreatedunix;
foreach ($data as $column => $value)
{
$updates[] = "$column = '$value' "; // value should be escaped!
}
$reallyLongSqlQuery = 'UPDATE profile SET '.
implode(',',$updates).
' WHERE id = 1';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.