>백엔드 개발 >PHP 튜토리얼 >Zend Framework 데이터베이스 운영 기술 요약

Zend Framework 데이터베이스 운영 기술 요약

高洛峰
高洛峰원래의
2018-05-25 16:51:541763검색

본 글은 주로 Zend Framework 데이터베이스 운영 기술을 소개하고 있으며, 데이터베이스 운영을 위한 Zend Framework의 공통 기능, 공통 운영, 관련 주의사항을 예시 형태로 요약 분석하였습니다.

예제는 Zend Framework 데이터베이스 작업을 요약합니다. 다음과 같이 참조용으로 모든 사람과 공유하십시오.

Zend_Db 데이터베이스 지식

예:

모델 파일:

$this->fetchAll("is_jian=1","id DESC",0,2)->toArray();
//根据is_jian=1,按id倒序排列取前2条记录当第一个参数为null时,则直接按id倒序排列ASC为正序。

라우팅 파일:

$video=new Video();//实例化数据库类
$this->view->get2Video =$video->get2Video();//取到2条首页推荐的数据

index.phtml 파일:

<?php foreach ($this->get2Video as $video): ?>
<?=$video[&#39;id&#39;]; ?>
<?=$video[&#39;name&#39;]; ?>
<? endforeach; ?>

따옴표를 추가하여 방지하세요. 데이터베이스 공격

quote 사용법

$value = $db->quote(&#39;St John"s Wort&#39;);
// $value 现在变成了 &#39;"St John\"s Wort"&#39; (注意两边的引号)
// 为数组加引号
$value = $db->quote(array(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;));
// $value 现在变成了 &#39;"a", "b", "c"&#39; (","分隔的字符串)

quoteInto 사용법

echo $where = $db->quoteInto(&#39;id = ?&#39;, 1);
// $where 现在为 &#39;id = "1"&#39; (注意两边的引号)
// 在where语句中为数组加上引号
$where = $db->quoteInto(&#39;id IN(?)&#39;, array(1, 2, 3));
// $where 现在为 &#39;id IN("1", "2", "3")&#39; (一个逗号分隔的字符串)

(1) 데이터 쿼리 요약

직접 쿼리(완전한 SQL 문 사용)

//function quoteInto($text, $value, $type = null, $count = null)
$db = $this->getAdapter();
$sql = $db->quoteInto(&#39;SELECT * FROM `m_video` WHERE `is_guo` =?&#39;, &#39;1&#39;);
$result = $db->query($sql);
// 使用PDOStatement对象$result将所有结果数据放到一个数组中
$videoArray = $result->fetchAll();

fetchAll 사용법

fetchAll($where = null, $order = null, $count = null, $offset = null)

에서 모든 결과를 검색합니다. 결과 집합 필드의 값이 연속 배열로 반환됩니다. 매개변수가 설정되지 않은 경우 null로 작성

결과 집합에서 지정된 수의 결과를 검색할 수 있습니다

$videoArray=$this->fetchAll("is_jian=1 and is_guo=1","id DESC",0,2)->toArray();

fetchAssoc 사용법

fetchAssoc($sql, $bind = array())

결과 세트의 모든 필드 값을 검색하여 연관 배열로 반환합니다. 첫 번째 필드는 코드로 사용됩니다.

$db = $this->getAdapter();
$videoArray=$db->fetchAssoc("SELECT * FROM m_video WHERE `is_jian` = :title",array(&#39;title&#39; => &#39;1&#39;));

fetchCol 사용법

fetchCol($sql, $bind = array())

모든 결과 행의 첫 번째 필드 이름 가져오기

$db = $this->getAdapter();
$videoArray=$db->fetchCol("SELECT name FROM m_video WHERE `is_jian` = :title",array(&#39;title&#39; => &#39;1&#39;));

fetchOne 사용법

fetchOne($sql, $bind = array())

첫 번째 필드 값만 검색

$db = $this->getAdapter();
echo $videoArray=$db->fetchOne("SELECT count(*) FROM m_video WHERE `is_jian` = :title",array(&#39;title&#39; => &#39;1&#39;));

fetchPairs 사용법

fetchPairs($sql, $bind = array())

관련 배열 검색, 첫 번째 필드 값은 코드(id), 두 번째 필드는 값(이름)

반환: Array([1] => Zodiac Romance [ 2] => Romance), 1,2: id 필드

$db = $this->getAdapter();
$videoArray=$db->fetchPairs("SELECT id, name FROM m_video WHERE is_jian = :title",array(&#39;title&#39; => &#39;1&#39;));

fetchRow 사용법

fetchRow($where = null, $order = null)

은 첫 번째 행만 검색합니다. 결과 세트

$videoArray=$this->fetchRow("is_jian=1 and is_guo=1", &#39;id DESC&#39;)->toArray();

쿼리 사용법

//function query($sql, $bind = array())
$db = $this->getAdapter();
$result = $db->query(&#39;SELECT * FROM `m_video`&#39;);
//$result = $db->query(&#39;SELECT * FROM `m_video` WHERE `name` = ? AND id = ?&#39;,array(&#39;十二生肖奇缘&#39;, &#39;1&#39;));
//$result->setFetchMode(Zend_Db::FETCH_OBJ);//FETCH_OBJ为默认值,FETCH_NUM,FETCH_BOTH
//while ($row = $result->fetch()) {
//  echo $row[&#39;name&#39;];
//}
//$rows = $result->fetch();
//$rows = $result->fetchAll();
//$obj = $result->fetchObject();//echo $obj->name;
// echo $Column = $result->fetchColumn(0);//得到结果集的第一个字段,比如0为id号,用于只取一个字段的情况
print_r($rows);

사용 선택

$db = $this->getAdapter();
$select = $db->select();
$select->from(&#39;m_video&#39;, array(&#39;id&#39;,&#39;name&#39;,&#39;clicks&#39;))
->where(&#39;is_guo = :is_guo and name = :name&#39;)
->order(&#39;name&#39;)// 按什么排序列,参加为数组(多个字段)或字符串(一个字段)
->group()//分组
->having()//分组查询数据的条件
->distinct()// 无参数,去掉重复的值。有时候与groupby返回的结果一样
->limit(10);
// 读取结果使用绑定的参数
$params = array(&#39;is_guo&#39; => &#39;1&#39;,&#39;name&#39;=>&#39;十二生肖奇缘&#39;);
//$sql = $select->__toString();//得到查询语句,可供调试
$result = $db->fetchAll($select,$params);
执行select的查询
$stmt = $db->query($select);
$result = $stmt->fetchAll();

또는

$stmt = $select->query();
$result = $stmt->fetchAll();

사용

$db->fetchAll($select)

를 직접 사용해도 결과는 같습니다

다중 테이블 조인트 쿼리

$db = $this->getAdapter();
$select = $db->select();
$select->from(&#39;m_video&#39;, array(&#39;id&#39;,&#39;name&#39;,&#39;pic&#39;,&#39;actor&#39;,&#39;type_id&#39;,&#39;up_time&#39;))
->where(&#39;is_guo = :is_guo and is_jian = :is_jian&#39;)
->order(&#39;up_time&#39;)
->limit(2);
$params = array(&#39;is_guo&#39; => &#39;1&#39;,&#39;is_jian&#39;=>&#39;1&#39;);
$select->join(&#39;m_type&#39;, &#39;m_video.type_id = m_type.t_id&#39;, &#39;type_name&#39;);//多表联合查询
$videoArray = $db->fetchAll($select,$params);

find() 메소드를 사용하면 기본 키 값을 사용하여 테이블의 데이터를 검색할 수 있습니다.

// SELECT * FROM round_table WHERE id = "1"
$row = $table->find(1);
// SELECT * FROM round_table WHERE id IN("1", "2", 3")
$rowset = $table->find(array(1, 2, 3));

(2) 데이터 삭제 요약

첫 번째 방법: 어떤 테이블이든 삭제할 수 있습니다.

//quoteInto($text, $value, $type = null, $count = null)
$table = &#39;m_video&#39;;// 设定需要删除数据的表
$db = $this->getAdapter();
$where = $db->quoteInto(&#39;name = ?&#39;, &#39;ccc&#39;);// 删除数据的where条件语句
echo $rows_affected = $db->delete($table, $where);// 删除数据并得到影响的行数

두 번째 방법: 이 테이블만 삭제할 수 있습니다.

//delete用法
// delete($where)
$where = "name = &#39;bbb&#39;";
echo $this->delete($where);// 删除数据并得到影响的行数

(3) 데이터 업데이트 요약

첫 번째 방법: 모든 테이블을 업데이트할 수 있습니다

// 以"列名"=>"数据"的格式构造更新数组,更新数据行
$table = &#39;m_video&#39;;// 更新的数据表
$db = $this->getAdapter();
$set = array (
&#39;name&#39; => &#39;蝶影重重&#39;,
&#39;clicks&#39; => &#39;888&#39;,
);
$where = $db->quoteInto(&#39;id = ?&#39;, &#39;10&#39;);// where语句
// 更新表数据,返回更新的行数
echo $rows_affected = $db->update($table, $set, $where);

두 번째 방법: 이 테이블의

$set = array (
&#39;name&#39; => &#39;蝶影重重22&#39;,
&#39;clicks&#39; => &#39;8880&#39;,
);
$db = $this->getAdapter();
$where = $db->quoteInto(&#39;id = ?&#39;, &#39;10&#39;);// where语句
$rows_affected = $this->update($set, $where);// 更新表数据,返回更新的行数
만 업데이트할 수 있습니다


(4) 데이터 삽입 요약

첫 번째 방법: 모든 테이블에 데이터를 삽입할 수 있습니다


$table = &#39;m_gao&#39;;// 插入数据的数据表
$db = $this->getAdapter();
// 以"列名"=>"数据"的格式格式构造插入数组,插入数据行
$row = array (
&#39;title&#39;   => &#39;大家好。111&#39;,
&#39;content&#39; => &#39;影视网要改成用zend framework开发啊&#39;,
&#39;time&#39; => &#39;2009-05-04 17:23:36&#39;,
);
// 插入数据行并返回插入的行数
$rows_affected = $db->insert($table, $row);
// 最后插入的数据id
echo $last_insert_id = $db->lastInsertId();
$row=array(
&#39;name&#39;=>&#39;curdate()&#39;,
&#39;address&#39; => new Zend_Db_Expr (&#39;curdate()&#39;)
)

이런 식으로 하위 필드 이름에는 curdate() 문자열이 삽입되고, 주소에는 시간 값(curdate() 2009-05-09 결과)이 삽입됩니다.

두 번째 방법: 이 표에 있는 항목에만 적합할 수 있으며 아직 요약되지 않았습니다

(5)트랜잭션 처리

$table = &#39;m_gao&#39;;// 插入数据的数据表
$db = $this->getAdapter();
$db->beginTransaction();//Zend_Db_Adapter会回到自动commit模式下,直到你再次调用 beginTransaction()方法
// 以"列名"=>"数据"的格式格式构造插入数组,插入数据行
$row = array (
&#39;id&#39;=>null,
&#39;title&#39;   => &#39;大家好。111&#39;,
&#39;content&#39; => &#39;影视网要改成用zend framework开发啊&#39;,
&#39;time&#39; => &#39;2009-05-04 17:23:36&#39;,
);
try {
// 插入数据行并返回插入的行数
$rows_affected = $db->insert($table, $row);
// 最后插入的数据id
$last_insert_id = $db->lastInsertId();
$db->commit();// 事务提交
}catch (Exception $e){
$db->rollBack();
echo &#39;捕获异常:&#39;.$e->getMessage();//打出异常信息
}
echo $last_insert_id;

(6) 기타

$db = $this->getAdapter();
$tables = $db->listTables(); //列出当前数据库中的所有表
$fields = $db->describeTable(&#39;m_video&#39;);//列出一个表的字段情况

Zend Framework 데이터베이스 운영 기술 요약 관련 기사를 더 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.