我正在php Laravel项目中进行代码审查。我仍然是相对较新的框架。我已经使用它大约1.5年了。我不知道所有的内部工作,需要一些建议。我觉得我对php有很好的处理能力。我的问题是下面的代码。在PHP中,我会使用PDO和绑定参数的一切,这个代码似乎缺少它。有安全问题吗?这是在Laravel 4.2中。
try {
$stmt = DB::select('SELECT a.email, a.zipcode, a.is_subscribed, b.no_longer_available, b.reduced_price,b.newly_listed
FROM users a INNER JOIN user_preferences b ON (a.user_id = b.user_id)
WHERE a.user_id = "' . $this->user->user_id . '";');
} catch (Exception $e) {
return FALSE;
}
您可以看到字符串在函数中而未绑定。在laravel中,不应该使用像DB :: select($ sql,$ params)这样的东西吗?
第二个问题:下面的代码是否甚至是有效的Laravel代码?我找不到任何文件。
$sql = "UPDATE users a INNER JOIN user_preferences b ON a.user_id = b.user_id
SET a.is_subscribed = '$is_subscribed',b.no_longer_available = '$no_longer_available',
b.reduced_price = '$reduced_price', b.newly_listed = '$newly_listed'
WHERE a.user_id = '$user_id';";
try
{
$stmt = DB::update($sql);
$count = count($stmt);
} catch (Exception $e) {
return FALSE;
}
假设所有这些$变量都有效。
is: $stmt = DB::update($sql); even a valid Laravel function/method
答案 0 :(得分:2)
你以非常艰难的方式做到这一点。 Laravel的设置方式应该考虑对象的所有内容。这是一种新的思维方式。
所以,显然有一个User对象。然后,您可以创建更多对象并定义它们之间的关系。例如,您可以创建一个新模型,并将其命名为“偏好”。使用包含'user_id', 'preference_name', 'preference_value'
的匹配表。
然后你可以在用户模型中定义关系,如下所示:
public function preferences() {
return $this->hasMany('App/Preference');
}
现在您只需使用$user = User::find(1);
抓取用户,其中1将是用户ID。然后你可以使用$user->preferences()
,这将返回该用户的所有首选项。不需要SQL。 TADA! (或者您可以在“用户”表中添加所有首选项,但这是“蹩脚”)
我真的希望这有助于你理解。
如果您想了解更多信息,我实际上是在youtube上发布了一个系列。
如果需要,请查看 - Learn Laravel