Oricle 操作类
define('OCI_RETURN_ALLS',OCI_BOTH + OCI_RETURN_LOBS);
class Oracle {
/**
* select方法返回的最大记录数
*/
const MAX_ROW_NUM = 1000;
/**
* 数据查询结果集对象
* @var object $dataSet
*/
public $dataSet = NULL ;
/**
* 数据源对象
* @var object $ds
*/
public $ds = NULL ;
/**
* 查询的SQL语句
* @var string $sql
*/
public $sql = '' ;
/**
* 执行查询的模式,值为 OCI_COMMIT_ON_SUCCESS 或 OCI_DEFAULT
* @var string $excuteMode
*/
public $executeMode = OCI_COMMIT_ON_SUCCESS ;
/**
* 构造函数
* @param object $ds 数据库
* @param string $sql 要初始化查询的SQL语句
*/
function __construct($ds=NULL , $sql=NULL) {
if (!$ds) {
$this->error(DbException::DB_UNCONNECTED, '数据库还
未连接。');
} else {
$this->ds = $ds;
if ($sql) {
$this->open($sql);
}
}
}
/**
* 释放所占用的内存
* @param object $dataSet 需要释放资源的结果集
* @access public
*/
public function close($dataSet=NULL) {
if ($dataSet) {
@oci_free_statement($dataSet);
} else {
@oci_free_statement($this->dataSet);
$this->eof = false ;
$this->recordCount = 0 ;
$this->recNo = -1 ;
}
}
/**
* 对$pass进行数据库加密,返回加密之后的值
* @param string $pass 要加密的字符串
* @return string
* @access public
*/
public function encodePassword($pass) {
return md5($pass);
}
/**
* 得到错误信息和错误代号
* @param integer $queryResult 查询结果
* @return array
* @access protected
*/
protected function errorInfo($queryResult = NULL) {
$result = oci_error($this->ds->connect);
return $result;
}
/**
* 错误信息处理
* @param string $errorId 错误ID
* @param string $errorMessage 错误信息
* @access protected
*/
protected function error($errorId, $errorMessage) {
throw new DbException($errorMessage, $errorId);
}
/**
* 执行SQL语句
* @param string $sql SQL语句
* @return object
* @param int $rowFrom 启始行号,行号从1开始
* @param int $rowTo 结束行号,值为0表示
* @access public
* @see DbQuery::open
*/
public function execute($sql = '', $rowFrom = 0, $rowTo =
self::MAX_ROW_NUM) {
if ($rowFrom != 0 || $rowTo != self::MAX_ROW_NUM) {
$sql = 'select * from (select row_.*, rownum rownum_
from ('
. $sql . ') row_ where rownum
. $rowTo . ') where rownum_ >= ' .
$rowFrom;
}
//echo $sql . '
';
//$start = microtime(true);
$dataSet = @oci_parse($this->ds->connect, $sql);
$executeSucceed = @oci_execute($dataSet, $this-
>executeMode);
//echo 'sql:'. ((string)(microtime(true)-$start)) . '
';
if (!$dataSet || !$executeSucceed) {
$sqlError = $this->errorInfo();
$errorMessage = '执行[' .
$sql color=#FF0000> ['
. ']出错!
. $sqlError['code'] . ']: '
. $sqlError['message'] . '
$this->error(DbException::DB_QUERY_ERROR,
$errorMessage);
}
return $dataSet;
}
/**
* 执行SQL语句,结果集保存到属性$dataSet中
* @param string $sql SQL语句
* @param int $rowFrom 启始行号,行号从1开始
* @param int $rowTo 结束行号,值为0表示
* @return object
* @access public
* @see DbQuery::execute
*/
public function open($sql='', $rowFrom = 0, $rowTo =
self::MAX_ROW_NUM) {
$this->dataSet = $this->execute($sql, $rowFrom, $rowTo);
$this->sql = $sql ;
return $this->dataSet;
}
/**
* 将一行的各字段值拆分到一个数组中
* @param object $dataSet 结果集
* @param integer $resultType 返回类型,OCI_ASSOC、OCI_NUM 或
OCI_BOTH
* @return array
*/
public function fetchRecord($dataSet=NULL, $resultType=OCI_BOTH) {
$result = @oci_fetch_array(($dataSet) ? $dataSet : $this-
>dataSet, $resultType);
if (is_array($result)) {
foreach ($result as $key => $value) {
if (!is_numeric($key)) {
$result[strtolower($key)] = $value;
}
}
}
return $result;
}
public function snext() {
$result = @oci_fetch_array($this->dataSet, OCI_BOTH);
return $result;
}
/**
* 取得字段数量
* @param object $dataSet 结果集
* @return integer
*/
public function getFieldCount($dataSet = NULL) {
return oci_num_fields(($dataSet) ? $dataSet : $this-
>dataSet);
}
/**
* 取得下一条记录。返回记录号,如果到了记录尾,则返回FALSE
* @return integer
* @access public
* @see getPrior()
*/
public function next() {
return $this->fetchRecord();
}
/**
* 得到当前数据库时间,格式为:yyyy-mm-dd hh:mm:ss
* @return string
* @access public
*/
public function getNow() {
return $this->getValue('SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD
HH24:MI:SS') dateOfNow FROM DUAL');
}
/**
* 根据SQL语句从数据表中取数据,只取第一条记录的值,
* 如果记录中只有一个字段,则只返回字段值。
* 未找到返回 FALSE
*
* @param string $sql SQL语句
* @return array
* @access public
*/
public function getValue($sql = '', $hasClob = false) {
$dataSet = $this->execute($sql, 1, 1);
if ($hasClob) {
$returnType = OCI_RETURN_ALLS;
} else {
$returnType = OCI_BOTH;
}
if ($result = $this->fetchRecord($dataSet,$returnType)) {
$fieldCount = $this->getFieldCount($dataSet);
$this->close($dataSet);
return ($fieldCount
} else {
return false ;
}
}
public function getSeq($seqName = '') {
$dataSet = $this->execute('SELECT '.$seqName.'.nextval from
sys.dual');
if ($result = $this->fetchRecord($dataSet)) {
$fieldCount = $this->getFieldCount($dataSet);
$this->close($dataSet);
return ($fieldCount
} else {
return false ;
}
}
/**
* 表是否存在,返回true
* @param string $tableName 要查询的表名
* @return bool
* @access public
*/
public function tableIsExists($tableName) {
return false;
}
/**
* 开始事务
* @access public
*/
public function begin() {
$this->executeMode = OCI_DEFAULT;
}
/**
* 提交事务
* @access public
*/
public function commit() {
oci_commit($this->ds->connect);
$this->executeMode = OCI_COMMIT_ON_SUCCESS;
}
/**
* 回滚事务
* @access public
*/
public function rollback() {
oci_rollback($this->ds->connect);
$this->executeMode = OCI_COMMIT_ON_SUCCESS;
}
/**
* 插入一条记录
* @param string $tableName 表名
* @param array $fieldArray 字段数组
* @param string $whereForUnique 唯一性条件
* @return int
* @access public
*/
public function insert($tableName, $fieldArray, $whereForUnique =
NULL, $clobField = NULL ) {
if (!$tableName || !$fieldArray || !is_array($fieldArray)) {
throw new Exception('参数 $tableName 或 $fieldArray
的值不合法!');
}
if ($whereForUnique) {
$where = ' WHERE ' . $whereForUnique;
$isExisted = $this->getValue('SELECT COUNT(*) FROM '
. $tableName . $where);
if ($isExisted) {
throw new DbException('记录已经存在!',
DbException::DB_RECORD_IS_EXISTED);
}
}
$fieldNameList = array();
$fieldValueList = array();
foreach ($fieldArray as $fieldName => $fieldValue) {
if (!is_int($fieldName)) {
$fieldNameList[] = $fieldName;
if ($clobField && $clobField==$fieldName) {
$fieldValueList[] = 'EMPTY_CLOB()';
$hasClob = true;
$clobStr = str_replace
("''","'",$fieldValue);
} else {
$fieldValueList[] = ''' .
$fieldValue . ''';
}
}
}
$fieldName = implode(',', $fieldNameList);
$fieldValue = implode(',', $fieldValueList);
$sql = 'INSERT INTO ' . $tableName . '('
. $fieldName . ') VALUES (' .
$fieldValue . ')';
if ($hasClob) {
$sql .= ' RETURNING content INTO :clob_string';
$dataSet = oci_parse($this->ds->connect, $sql);
$clob = oci_new_descriptor($this->ds->connect,
OCI_D_LOB);
oci_bind_by_name($dataSet, ':clob_string', $clob, -
1, OCI_B_CLOB);
oci_execute($dataSet, OCI_DEFAULT);
$clob->save($clobStr);
oci_commit($this->ds->connect);
return $dataSet;
} else {
return $this->execute($sql);
}
}
/**
* 更新一条记录
* @param string $tableName 表名
* @param array $fieldArray 字段数组
* @param string $whereForUpdate 查询条件
* @param string $whereForUnique 唯一性条件
* @return int
* @access public
*/
public function update($tableName, $fieldArray,
$whereForUpdate=NULL, $whereForUnique=NULL, $clobField = NULL) {
if (!$tableName || !$fieldArray || !is_array($fieldArray)) {
throw new Exception('参数 $tableName 或 $fieldArray
的值不合法!');
}
if ($whereForUnique) {
$where = ' WHERE ' . $whereForUnique;
$isExisted = $this->getValue('SELECT COUNT(*) FROM '
. $tableName . $where);
if ($isExisted) {
throw new DbException('记录已经存在!',
DbException::DB_RECORD_IS_EXISTED);
}
}
$fieldNameValueList = array();
foreach ($fieldArray as $fieldName => $fieldValue) {
if (!is_int($fieldName)) {
if ($clobField && $clobField==$fieldName) {
$fieldNameValueList[] = $fieldName .
'=EMPTY_CLOB()';
$hasClob = true;
$clobStr = str_replace
("''","'",$fieldValue);
} else {
$fieldNameValueList[] = $fieldName .
'='' . $fieldValue . ''';
}
}
}
$fieldNameValue = implode(',', $fieldNameValueList);
if ($whereForUpdate) {
$whereForUpdate = ' WHERE ' . $whereForUpdate;
}
$sql = 'UPDATE ' . $tableName
. ' SET ' . $fieldNameValue .
$whereForUpdate;
if ($hasClob) {
$sql .= ' RETURNING content INTO :clob_string';
$dataSet = oci_parse($this->ds->connect, $sql);
$clob = oci_new_descriptor($this->ds->connect,
OCI_D_LOB);
oci_bind_by_name($dataSet, ':clob_string', $clob, -
1, OCI_B_CLOB);
oci_execute($dataSet, OCI_DEFAULT);
$clob->save($clobStr);
oci_commit($this->ds->connect);
return $dataSet;
} else {
return $this->execute($sql);
}
}
/**
* 选择一条记录
* @param string $sql sql语句
* @param string $dataFormat 返回数据格式, 值
有"array","hashmap","hashmap_str","dataset"
* @param int $rowFrom 启始行号,行号从1开始
* @param int $rowTo 结束行号,值为0表示
* @result array
* @access public
*/
public function select($sql, $dataFormat = 'array', $rowFrom = 0,
$rowTo = self::MAX_ROW_NUM, $hasClob = false) {
$dataSet = $this->execute($sql, $rowFrom, $rowTo);
switch ($dataFormat) {
case 'array': //数组
$result = array();
$isMultiField = ($this->getFieldCount($dataSet) >
1);
$i = 0;
if ($hasClob) {
$returnType = OCI_RETURN_ALLS;
} else {
$returnType = OCI_BOTH;
}
while ($data = $this->fetchRecord
($dataSet,$returnType)) {
$result[$i] = ($isMultiField) ? $data :
$data[0];
$i++;
}
$this->close($dataSet);
break;
case 'hashmap': //散列表
$result = array();
while ($data = $this->fetchRecord($dataSet)) {
$result[ $data[0] ] = $data[1];
}
$this->close($dataSet);
break;
case 'hashmap_str': //散列表字符串
$result = array();
while ($data = $this->fetchRecord($dataSet,
OCI_NUM)) {
$result[] = $data[0] . '=' . $data[1];
}
$result = implode('|', $result);
$this->close($dataSet);
break;
default: //dataset 数据集,当返回数据格式为数据集时,select
方法的功能与execute方法相同
$result = $dataSet;
}
return $result;
}
/**
* 返回最大值
* @param string $tableName 表名
* @param string $idField 字段名
* @param string $where 查询条件
* @return int
* @access public
*/
public function getMax($tableName, $idField, $where = NULL) {
$where = ($where) ? (' WHERE ' . $where) : '';
return $this->getValue('SELECT MAX(' . $idField . ') FROM '
. $tableName . $where);
}
}

Le rôle principal de MySQL dans les applications Web est de stocker et de gérer les données. 1.MySQL traite efficacement les informations utilisateur, les catalogues de produits, les enregistrements de transaction et autres données. 2. Grâce à SQL Query, les développeurs peuvent extraire des informations de la base de données pour générer du contenu dynamique. 3.MySQL fonctionne basé sur le modèle client-serveur pour assurer une vitesse de requête acceptable.

Les étapes pour construire une base de données MySQL incluent: 1. Créez une base de données et une table, 2. Insérer des données et 3. Conduisez des requêtes. Tout d'abord, utilisez les instructions CreateDatabase et CreateTable pour créer la base de données et la table, puis utilisez l'instruction InsertInto pour insérer les données, et enfin utilisez l'instruction SELECT pour interroger les données.

MySQL convient aux débutants car il est facile à utiliser et puissant. 1.MySQL est une base de données relationnelle et utilise SQL pour les opérations CRUD. 2. Il est simple à installer et nécessite la configuration du mot de passe de l'utilisateur racine. 3. Utilisez l'insertion, la mise à jour, la suppression et la sélection pour effectuer des opérations de données. 4. OrderBy, où et jointure peut être utilisé pour des requêtes complexes. 5. Le débogage nécessite de vérifier la syntaxe et d'utiliser Expliquez pour analyser la requête. 6. Les suggestions d'optimisation incluent l'utilisation d'index, le choix du bon type de données et de bonnes habitudes de programmation.

MySQL convient aux débutants car: 1) facile à installer et à configurer, 2) Riches Ressources d'apprentissage, 3) Syntaxe SQL intuitive, 4) Prise en charge de l'outil puissant. Néanmoins, les débutants doivent surmonter des défis tels que la conception de la base de données, l'optimisation des requêtes, la gestion de la sécurité et la sauvegarde des données.

Oui, sqlisaprogrammingNanguages en matière de responsabilité de responsabilité.

Les attributs acides comprennent l'atomicité, la cohérence, l'isolement et la durabilité, et sont la pierre angulaire de la conception de la base de données. 1. L'atomicité garantit que la transaction est complètement réussie ou complètement échouée. 2. La cohérence garantit que la base de données reste cohérente avant et après une transaction. 3. L'isolement garantit que les transactions n'interfèrent pas entre elles. 4. La persistance garantit que les données sont enregistrées en permanence après la soumission des transactions.

MySQL n'est pas seulement un système de gestion de base de données (SGBD) mais également étroitement lié aux langages de programmation. 1) En tant que SGBD, MySQL est utilisé pour stocker, organiser et récupérer des données et l'optimisation des index peut améliorer les performances de la requête. 2) La combinaison de SQL avec des langages de programmation, intégrés dans Python, en utilisant des outils ORM tels que SQLALCHEMY peut simplifier les opérations. 3) L'optimisation des performances comprend l'indexation, la requête, la mise en cache, la division des bibliothèques et des tableaux et la gestion des transactions.

MySQL utilise des commandes SQL pour gérer les données. 1. Les commandes de base incluent sélectionner, insérer, mettre à jour et supprimer. 2. L'utilisation avancée implique des fonctions de jointure, de sous-requête et d'agrégation. 3. Les erreurs courantes incluent les problèmes de syntaxe, de logique et de performances. 4. Les conseils d'optimisation incluent l'utilisation d'index, d'éviter la sélection * et l'utilisation de la limite.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

PhpStorm version Mac
Le dernier (2018.2.1) outil de développement intégré PHP professionnel

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Dreamweaver Mac
Outils de développement Web visuel

Dreamweaver CS6
Outils de développement Web visuel