用于将数据插入 mysql 数据库的代码

问题描述 投票:0回答:8

您使用什么代码将数据插入mysql数据库?

只是您真实项目中的一小段代码。最好是CRUD类型。
我的意思是“真实”代码。 请不要复制粘贴手册中的代码示例。这与现实生活的需求不同。请不要回答“您可以使用这些方法......”。我认识他们所有人。我要求的不是方法,而是真正的编码经验。 我发现分享你的代码、学习其他人的经验非常有趣且很有启发。

请注意,代码必须完整,包括所有数据准备。但如果可能的话,不进行验证。如果后台工作太多(如模型初始化等),可以省略。我要求更多的是思考的食物,而不是复制和粘贴的代码。

欢迎 PHP 以外的语言,以及任何 ORM 或框架的使用。但请记住 - 不是从文档示例中复制粘贴,而是从您自己的项目中复制粘贴。差别很大。

php mysql
8个回答
2
投票
Redbean ORM

。我所做的基本上是将我自己的代码包装在其域对象周围,因此它看起来像 class Book extends RedBean_DomainObject { public function __construct($id) { if ($id!=0) $this->find($id); } public function save_details($author, $title) { // insert OR update new entry $this->author = $author; $this->title = $title; $this->save(); } }

代码将检查“bean”是否存在;如果是,它将加载它。您将属性分配给该类,然后调用 save() 方法将其保存到 bean。 RedBean ORM 会自动检测是保存还是更新。
注意

:RedBean 域对象已被更好的东西取代。 我也在使用 WordPress wp-db,我喜欢它的语法

$wpdb->insert("books", array('title' => $title, 'author' =>$author));

我在网上找到了一个
小包装器

,它也允许我在重复键上执行插入...。 $wpdb->insert_on_duplicate("author_book_relationship", array('book_id' => $book_id, 'date_published' =>$date_published), array('book_id' => $book_id));

第一个参数是表,第二个是插入/更新信息,最后一个是 UPDATE 部分的 where 子句。

编辑

我通常将 SQL 函数包装在助手中

class BookHelper { public function save_relationship($id, $book, $author) { global $wpdb; $wpdb->insert_on_duplicate("author_book_relationship", array('book_id' => $book_id, 'date_published' =>$date_published), array('book_id' => $book_id)); } }

在策略中

class BookSaveStrategy { protected $book_helper; public function save_relationship($id, $book, $title) { // validate id, book and title //..... // Save if ok $this->book_helper->save_relationship($id, $book, $title); } }

可以在控制器中使用

if (isset($_POST['save_book'])) { $book_save_strategy->save($_POST['id'], $_POST['author'], $_POST['title']); }



2
投票

$User = new User(); $User->name = 'John'; $User->email = '[email protected]'; $User->homepage = 'http://example.com'; $User->save();

保持简单、轻量级和有效。


1
投票
ADOdb

$stmt = $db->Prepare("INSERT INTO `table` (`column1`, `column2`, `column3`) VALUES (?, ? ,?)"); $insert = $db->Execute($stmt, array($value1, $value2, $value3)); if($insert === false) throw new Exception($db->ErrorMsg());



0
投票

原始查询:

Db::query( "UPDATE sometable SET city = %s, region = %s WHERE id = %d", $city, $region, $id); // or Db::query( "UPDATE sometable SET city = %(city)s, region = %(region)s WHERE id = %(id)d", array('city' => $city, 'region' => $region, 'id' => $id));

支持多种占位符,例如 
%s

(字符串)、

%d
(整数)、
%f
(浮点型)、
%?
(自动检测参数类型)、
%-
(无)转义,按原样插入)甚至
%as
%ad
等(字符串/整数/任何内容的数组,替换为逗号分隔值)。一切都在幕后妥善逃脱。

还有一些功能相当有限的 ORM:

$city = !empty($id) ? City::fetchOneById($id) : City::create(); $city->setValues(array('city' => $city, 'region' => $region)); $city->save();



0
投票

DateIterator

是一个自定义迭代器,它以以下格式返回连续日期

yyyy-mm-dd
work_days
是一个自定义助手,用于计算 - 呃 - 的数量 两个提供日期之间的工作日。对意大利语变量名表示歉意。

function richiesta_ferie($utente, $inizio, $fine) { // INSERT INTO Ferie $data = array( 'ID_Utente' => $utente, 'Richiesta' => date('Y-m-d H:i:s'), 'Inizio' => $inizio, 'Fine' => $fine, 'Stato' => 'P', ); $this->db->insert('Ferie', $data); $ID_Ferie = $this->db->insert_id(); // INSERT INTO Variazione $work_days = -1 * work_days($inizio, $fine); $data = array( 'ID_Richiesta' => $ID_Ferie, 'ID_Utente' => $utente, 'Giorni' => $work_days, ); $this->db->insert('Variazione', $data); // INSERT INTO Giorno // DateIterator defined in helpers/MY_date_helper.php $DateIterator = new DateIterator($inizio, $fine); foreach ( $DateIterator as $date ) { // skip sundays if ( date('w', strtotime($date)) == 0 ) { continue; } $data = array( 'ID_Utente' => $utente, 'ID_Richiesta' => $ID_Ferie, 'TipoRichiesta' => 'F', 'Giorno' => $date, 'Stato' => 'P', ); $this->db->insert('Giorno', $data); } }



0
投票
更改了字段名称。否则这是我使用的代码。


-1
投票

$fields=array('city','region'); if ($id=intval($_POST['id'])) { $query="UPDATE $table SET ".dbSet($fields)." WHERE id=$id"; } else { $query="INSERT INTO $table SET ".dbSet($fields); } dbget(0,$query);

dbSet()

是一个辅助函数,用于从 $_POST 数组中生成 SQL SET 语句,数组包含字段名称,并考虑使表单字段名称等于表字段名称。


dbget()

是一个运行查询的函数,0表示返回值的原始类型,以防在进一步的代码中需要它。

    


-1
投票
在调用 insertSQL() 方法之前,所有数据值都会经过验证、在适当的字符串处加引号并转义。使用的记录器是log4PHP。

编辑

使用案例:

$fileTreeTableFieldsArray = array ( 'FILE_ID', 'FILE_TYPE', 'FILE_NAME', 'FILE_PARENT_ID', 'FILESIZE', 'CREATED_BY', 'CREATED_ON', 'APPLICATION_CONTEXT' ); $fileTreeTableValuesArray = array ( database::getSQLValueString($this->_fileID,'int'), database::getSQLValueString($fileType,'text'), database::getSQLValueString($name,'text'), database::getSQLValueString($parentID,'int'), database::getSQLValueString($fileSize,'int'), database::getSQLValueString($_SESSION["USERID"],'int'), database::getSQLValueString('sysdate','datetime'), database::getSQLValueString($_SESSION["APPLICATION"],'int') ); Database::startTransaction(); try { $result = database::insertSQL('RCD_FILE_TREE', $fileTreeTableFieldsArray, $fileTreeTableValuesArray); } catch (Exception $e) { Database::rollback(); $error = $this->_setError(baseFileClassInsertException, $this->_fileCategory, $this->_fileName, $sql, $e->getMessage()); $this->_logger->error($this->_ErrorMessage); return $error; } Database::commitTransaction();

	
© www.soinside.com 2019 - 2024. All rights reserved.