欢迎各位兄弟 发布技术文章
这里的技术是共享的
/* 数据库设置 */ 'DB_TYPE' => '', // 数据库类型 'DB_HOST' => '', // 服务器地址 'DB_NAME' => '', // 数据库名 'DB_USER' => '', // 用户名 'DB_PWD' => '', // 密码 'DB_PORT' => '', // 端口 'DB_PREFIX' => '', // 数据库表前缀 'DB_PARAMS' => array(), // 数据库连接参数 'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志 'DB_LITE' => false, // 使用数据库Lite模式 'DB_FIELDS_CACHE' => true, // 启用字段缓存 'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8 'DB_DEPLOY_TYPE' => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 'DB_RW_SEPARATE' => false, // 数据库读写是否分离 主从式有效 'DB_MASTER_NUM' => 1, // 读写分离后 主服务器数量 'DB_SLAVE_NO' => '', // 指定从服务器序号复制代码'DB_FIELDTYPE_CHECK' // 3.2.3强制进行字段类型检测了 'DB_SQL_BUILD_CACHE' // 3.2.3取消了SQL创建缓存 'DB_SQL_BUILD_QUEUE' // 3.2.3取消了SQL创建缓存 'DB_SQL_BUILD_LENGTH' // 3.2.3取消了SQL创建缓存 'DB_SQL_LOG' // 由新增的DB_DEBUG参数取代 'DB_BIND_PARAM' // 新版采用PDO 自动参数绑定 无需设置复制代码'DB_DEBUG' //用于开启数据库调试模式,开启后即可记录SQL日志 'DB_LITE' // 是否采用数据库Lite模式连接 开启后只能使用原生SQL查询复制代码'DB_TYPE'=>'mysql', // 不再支持设置为PDO 也不再区分mysql和mysqli复制代码'DB_HOST' => '', // 服务器地址 采用IP地址 'DB_NAME' => '', // 数据库名 'DB_USER' => '', // 用户名 'DB_PWD' => '', // 密码 'DB_PORT' => '', // 端口 留空则取默认端口 'DB_CHARSET' => '', // 数据库编码复制代码'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => '192.168.1.10', // 服务器地址 'DB_NAME' => 'thinkphp', // 数据库名 'DB_USER' => 'root', // 用户名 'DB_PWD' => '1234', // 密码 'DB_PORT' => '3306', // 端口 'DB_PREFIX' => 'think_', // 数据库表前缀 'DB_CHARSET' => 'utf8', // 数据库编码 'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志复制代码//在模型里单独设置数据库连接信息 namespace Home\Model; use Think\Model; class UserModel extends Model{ // 采用数组方式定义 protected $connection = array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '1234', 'db_host' => '192.168.1.10', 'db_port' => '3306', 'db_name' => 'thinkphp', 'db_charset' => 'utf8', ); }复制代码//在模型里单独设置数据库连接信息 namespace Home\Model; use Think\Model; class UserModel extends Model{ // 使用字符串方式定义 protected $connection = 'mysql://root:1234@192.168.1.10:3306/thinkphp#utf8'; }复制代码//数据库配置1 'DB_CONFIG1' => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '1234', 'db_host' => '192.168.1.10', 'db_port' => '3306', 'db_name' => 'thinkphp', 'db_charset'=> 'utf8', ), //数据库配置2 'DB_CONFIG2' => 'mysql://root:1234@192.168.1.10:3306/thinkphp#utf8';复制代码//在模型里单独设置数据库连接信息 namespace Home\Model; use Think\Model; class UserModel extends Model{ //调用配置文件中的数据库配置1 protected $connection = 'DB_CONFIG1'; // 或者 protected $connection = 'DB_CONFIG2'; }复制代码$User = M('User','other_','mysql://root:1234@192.168.1.10/demo#utf8'); 复制代码$User = M('User','other_','DB_CONFIG2'); 复制代码
<tr><th>支持一下</th></tr>复制代码复制代码复制代码复制代码难道就没有设置一个开关来允许可以让用户自定义的方法么?
$db = M ( 'Smschannel', $this->tbPrefix, 'MYSQLDB' );$db->setProperty("trueTableName",$this->tbPrefix."TableName");复制代码复制代码复制代码都没有使用htmlspecialchars的第二个参数;
使用ENT_QUOTES能避免被sql注入;
我已经亲自试验,完全可以通过sql注入对数据库delete或update
字段类型如果能够在调度模式下记录错误就好了,如果在正式环境下把这些错误记录下,我们就能做下分析,不要把重要全放在之前的过滤机制上了。
'DB_HOST' => '../Data/data.db', // 服务器地址
'DB_PREFIX' => 'kh_', // 数据库表前缀
'DB_CHARSET'=> 'utf8', // 字符集
'DB_FIELDS_CACHE' => false, //字段缓存
'DB_HOST' => '192.168.0.2', // 服务器地址
'DB_NAME' => 'orcl', // 数据库名
'DB_USER' => 'sys', // 用户名
'DB_PWD' => 'Fin05', // 密码
'DB_PORT' => '1521', // 端口
'DB_PREFIX' => 'zch_', // 数据库表前缀
'DB_CHARSET' => 'utf8', // 数据库编码
'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志
这样设置提示 could not find driver。怎么办,望指教,谢
可以看到:
PDO drivers mysql, sqlite, oci
PDO Driver for OCI 8 and later enabled
引入'./core/ThinkPHP.php'; 打开网页显示
SQLSTATE[HY000]: pdo_oci_handle_factory: 超时
'DB_NAME' => 'orcl', // 数据库名
这个'orcl'换成全局服务名'orcl.168.0.2',
查看tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.168.0.2)
)
)
跟这里一致就可以了。
查询是没有问题,add()保存时出错,提示 ORA-01008: 并非所有变量都已绑定。
测试表只有两个字段,而且都是可以空缺的。所以对应上应该是没错的。
function post(){
$this->ad_obj = D("user");
if (IS_POST) {
if ($this->ad_obj->create()) {
if ($this->ad_obj->add()!==false) {
$this->success("保存成功!","/home/user/");
} else {
$this->error("保存失败!");
}
} else {
$this->error($this->ad_obj->getError());
}
}
}
用原生sql保存数据是没有问题的
$conn = oci_connect('sys', 'Fin05', 'orcl');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stmt = oci_parse($conn, "INSERT INTO zch_user (id, USER_LOGIN)
VALUES
(889, 'Think in java')");
oci_execute($stmt, OCI_DEFAULT);
$committed = oci_commit($conn);
print_r($committed);
请教了,还有怎样输出 add()时的sql,拿到sqldeveloper试下看看有无问题。
TRACE
#0 E:\website\������������\web\Core\Library\Think\Db\Driver\Oracle.class.php(79): PDOStatement->execute()
#1 E:\website\������������\web\Core\Library\Think\Db\Driver.class.php(810): Think\Db\Driver\Oracle->execute('INSERT INTO zch...', false)
#2 E:\website\������������\web\Core\Library\Think\Model.class.php(320): Think\Db\Driver->insert(Array, Array, false)
#3 E:\website\������������\web\App\Home\Controller\UserController.class.php(16): Think\Model->add()
#4 [internal function]: Home\Controller\userController->post()
execute('INSERT INTO zch...', false) 莫非这一段是sql?
这样设置,没有用处!没有反应!编码改变不了!