欢迎各位兄弟 发布技术文章
这里的技术是共享的
/* 数据库设置 */
'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?
这样设置,没有用处!没有反应!编码改变不了!