Heim> PHP-Framework> Laravel> Hauptteil

So aktualisieren Sie mehrere Datensätze in Laravel stapelweise (SQL-Injection verhindern)

藏色散人
Freigeben: 2021-08-25 09:02:17
nach vorne
3126 Leute haben es durchsucht

In der folgenden Tutorial-Kolumne vonLaravelerfahren Sie, wie Sie mehrere Datensätze in Laravel stapelweise aktualisieren, um SQL-Injection zu verhindern. Ich hoffe, dass es für Freunde in Not hilfreich ist!

Vorab geschrieben: einmal.

Sind Sie neidisch auf saveAll von thinkphp oder update_batch von ci, aber warum verfügt ein so elegantes Laravel nicht über eine ähnliche Batch-Update-Methode?

Experten

Habe es gegoogelt und festgestellt, dass jemand es bereits auf Stackoverflow geschrieben hat (https://stackoverflow.com/questions/26133977/laravel-bulk-update), aber es verhindert nicht die SQL-Injektion.

Dieser Artikel wurde in Verbindung mit Laravel's Eloquent angepasst, um die SQL-Injektion wirksam zu verhindern.

getTable(); // 表名 $firstRow = current($multipleData); $updateColumn = array_keys($firstRow); // 默认以id为条件更新,如果没有ID则以第一个字段为条件 $referenceColumn = isset($firstRow['id']) ? 'id' : current($updateColumn); unset($updateColumn[0]); // 拼接sql语句 $updateSql = "UPDATE " . $tableName . " SET "; $sets = []; $bindings = []; foreach ($updateColumn as $uColumn) { $setSql = "`" . $uColumn . "` = CASE "; foreach ($multipleData as $data) { $setSql .= "WHEN `" . $referenceColumn . "` = ? THEN ? "; $bindings[] = $data[$referenceColumn]; $bindings[] = $data[$uColumn]; } $setSql .= "ELSE `" . $uColumn . "` END "; $sets[] = $setSql; } $updateSql .= implode(', ', $sets); $whereIn = collect($multipleData)->pluck($referenceColumn)->values()->all(); $bindings = array_merge($bindings, $whereIn); $whereIn = rtrim(str_repeat('?,', count($whereIn)), ','); $updateSql = rtrim($updateSql, ", ") . " WHERE `" . $referenceColumn . "` IN (" . $whereIn . ")"; // 传入预处理sql语句和对应绑定数据 return DB::update($updateSql, $bindings); } catch (\Exception $e) { return false; } } }
Nach dem Login kopieren
Sie können es an Ihre eigenen Bedürfnisse anpassen. Das Folgende ist ein Anwendungsbeispiel:

// 要批量更新的数组 $students = [ ['id' => 1, 'name' => '张三', 'email' => 'zhansan@qq.com'], ['id' => 2, 'name' => '李四', 'email' => 'lisi@qq.com'], ]; // 批量更新 app(Students::class)->updateBatch($students);
Nach dem Login kopieren
Die generierte SQL-Anweisung lautet wie folgt:

UPDATE pre_students SET NAME = CASE WHEN id = 1 THEN '张三' WHEN id = 2 THEN '李四' ELSE NAME END, email = CASE WHEN id = 1 THEN 'zhansan@qq.com' WHEN id = 2 THEN 'lisi@qq.com' ELSE email END WHERE id IN (1, 2)
Nach dem Login kopieren
Ist die Effizienz erheblich verbessert?

Verwandte Empfehlungen:

Die neueste fünf Laravel-Video-Tutorials

Das obige ist der detaillierte Inhalt vonSo aktualisieren Sie mehrere Datensätze in Laravel stapelweise (SQL-Injection verhindern). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!