您使用什么代码将数据插入mysql数据库?
只是您真实项目中的一小段代码。最好是CRUD类型。
我的意思是“真实”代码。 请不要复制粘贴手册中的代码示例。这与现实生活的需求不同。请不要回答“您可以使用这些方法......”。我认识他们所有人。我要求的不是方法,而是真正的编码经验。
我发现分享你的代码、学习其他人的经验非常有趣且很有启发。
请注意,代码必须完整,包括所有数据准备。但如果可能的话,不进行验证。如果后台工作太多(如模型初始化等),可以省略。我要求更多的是思考的食物,而不是复制和粘贴的代码。
欢迎 PHP 以外的语言,以及任何 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']);
}
$User = new User();
$User->name = 'John';
$User->email = '[email protected]';
$User->homepage = 'http://example.com';
$User->save();
保持简单、轻量级和有效。
原始查询:
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();
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);
}
}
更改了字段名称。否则这是我使用的代码。
$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表示返回值的原始类型,以防在进一步的代码中需要它。
在调用 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();