nvarchar被截为255解决办法
PHP 将 nvarchar 按照 MySQL 的 varchar 处理了吧!本文给出了解决方法:
代码如下 | 复制代码 |
select cast(目标字段 as text) from 表名 |
假如你的 article 表中有个字段 summary 为 nvarchar,那么命令为:
代码如下 | 复制代码 |
select cast(summary as text) from article |
另一种情况text被截段解决办法
PHP 的配置文件 php.ini 中 MSSQL 部分:
[MSSQL]
代码如下 | 复制代码 |
; Valid range 0 - 2147483647. Default = 4096. ; Valid range 0 - 2147483647. Default = 4096. ; Valid range 0 - 2147483647. Default = 4096. ; Valid range 0 - 2147483647. Default = 4096. ; Maximum size of POST data that PHP will accept. |
需要根据实际情况设置。
文章简单的介绍了从数据库连接到把用户提交的数据保存到mysql数据库的整个过程,一一讲解了操作方法,有需要的朋友看看下面五步。1. 创建一个数据库连接
2. 发送一些不是必须的语句
3. 选择一个存储的数据库
4. 编写数据库插入语句
5. 发送这个语句
先看数据结构
代码如下 | 复制代码 |
-------------------------------------- -- CREATE TABLE IF NOT EXISTS `guest` ( --
-- CREATE TABLE IF NOT EXISTS `post` ( --
|
详细的分析也就这么五个步骤了,那么我们开始第一步吧,利用PHP提供的内置函数mysql_connect来创建一个数据库链接,这个函数需要三个参数,格式如下:
Mysql_connect(‘数据库所在的主机’,’链接数据库的用户名’,’链接数据库的密码’)。这个函数返回一个数据库连接资源号。
看我们在post.php中的链接代码:
代码如下 | 复制代码 |
$con=mysql_connect('localhost','root','root') or die('链接数据库失败!'); |
第一行创建一个数据库连接,把资源号赋给变量$con,如果连接失败,结束程序的执行输出提示信息“链接数据库失败!”。
第二行发送一个字符集设定语句,让数据在数据库中的出入都使用utf8字符集。这个语句是可有可无的,其中的语句可以写成set names gbk或者set names gb2312等等我们需要的字符集。
第三行利用PHP提供的mysql_select_db函数来选择我们要使用的数据库。
值得注意的是,mysql_query这个函数本身有两个参数:第一个参数就是我们要发送的数据库执行语句sql,第二个参数是数据库连接的资源编号,如果第二个参数没有指定的话,那么程序就会查找最近一个链接资源,也就是说这个参数不是必须的。我们以上包括将来的写法都是没有第二个参数的,按照程序的上下文我们第二行的语句可以写作:
mysql_query(“set names utf8”,$con)这样也是正确的。
这个函数的返回值是布尔型的,如果语句成功执行就返回true否则返回false——了解这一点很重要。
好,到此为止我们的数据库连接已经就绪,开始组装我们的sql插入语句,看一下代码(post.php 第67-76行):
代码如下 | 复制代码 |
$insertSql="insert into guest (name,qq,email) values ('$name','$qq','$email')"; |
在这个片段的第一行中我们组建了一个sql的插入语句,这个看来没什么可说的,唯一点就是把变量写进这些语句并且用引号包裹起来——对于数字型的不需要引号。
第二句发送语句,并判断是否被成功执行。
这个地方需要说明:PHP中if判断中的语句是会被执行的,例如if($c=$a+$b)这样的语句被执行的顺序是,先计算里面的语句然后再对结果作出判断。所以执行之后$c的值是$a,$b之和,判断的时候是对$c作出的判读。
所以在这个地方if判断的是mysql_query($insertSql)的返回结果,语句已经发送到了数据库。
第三行出现的函数mysql_insert_id——获取最近一次插入数据的时候自增序列的值,我们这里获取的是guest表中的id,因为只有这个id才是自增的。以备后用。
这个片段的第五行到最后都是进行的错误处理,如果语句没有被成功执行,那么就执行这些程序,倒数第二行的exit();函数的意思是终止程序向下执行。
这时候我们已经把guest信息保存到了Mysql的GuestBook的guest表中了
看一下post.php文件
代码如下 | 复制代码 |
//把以上插入取得的客户id和留言信息插入到post表中 |
代码如下 | 复制代码 |
<?php class MQ{ public static $client; private static $m_real; private static $m_front; private static $m_data = array(); const QUEUE_MAX_NUM = 100000000; const QUEUE_FRONT_KEY = '_queue_item_front'; const QUEUE_REAL_KEY = '_queue_item_real'; public static function setupMq($conf) { self::$client = memcache_pconnect($conf); self::$m_real = memcache_get(self::$client, self::QUEUE_REAL_KEY); self::$m_front = memcache_get(self::$client, self::QUEUE_FRONT_KEY); if (!isset(self::$m_real) || emptyempty(self::$m_real)) { self::$real= 0; } if (!isset(self::$m_front) || emptyempty(self::$m_front)) { self::$m_front = 0; } return self::$client; } public static function add($queue, $data) { $result = false; if (self::$m_real < self::QUEUE_MAX_NUM) { if (memcache_add(self::$client, $queue.self::$m_real, $data)) { self::mqRealChange(); $result = true; } } return $result; } public static function get($key, $count) { $num = 0; for ($i=self::$m_front;$i<self::$m_front + $count;$i++) { if ($dataTmp = memcache_get(self::$client, $key.$i)) { self::$m_data[] = $dataTmp; memcache_delete(self::$client, $key.$i); $num++; } } if ($num>0) { self::mqFrontChange($num); } return self::$m_data; } private static function mqRealChange() { memcache_add(self::$client, self::QUEUE_REAL_KEY, 0); self::$m_real = memcache_increment(self::$client, self::QUEUE_REAL_KEY, 1); } private static function mqFrontChange($num) { memcache_add(self::$client, self::QUEUE_FRONT_KEY, 0); self::$m_front = memcache_increment(self::$client, self::QUEUE_FRONT_KEY, $num); } public static function mflush($memcache_obj) { memcache_flush($memcache_obj); } public static function Debug() { echo 'real:'.self::$m_real."<br>/r/n"; echo 'front:'.self::$m_front."<br>/r/n"; echo 'wait for process data:'.intval(self::$m_real - self::$m_front); echo "<br>/r/n"; echo '<pre>'; print_r(self::$m_data); echo '<pre>'; } } define('FLUSH_MQ',0);//CLEAN ALL DATA define('IS_ADD',0);//SET DATA $mobj = MQ::setupMq('127.0.0.1','11211'); if (FLUSH_MQ) { MQ::mflush($mobj); } else { if (IS_ADD) { MQ::add('user_sync', '1test'); MQ::add('user_sync', '2test'); MQ::add('user_sync', '3test'); MQ::add('user_sync', '4test'); MQ::add('user_sync', '5test'); MQ::add('user_sync', '6test'); } else { MQ::get('user_sync', 10); } } MQ::Debug(); ?> |
好了下面来看看用法
代码如下 | 复制代码 |
MQ::setupMq('127.0.0.1','11211');//连接 MQ::add($key, $value);//添加数据到队列 MQ::add($key, $value);//添加数据到队列 MQ::add($key, $value);//添加数据到队列 MQ::add($key, $value);//添加数据到队列 MQ::add($key, $value);//添加数据到队列 MQ::add($key, $value);//添加数据到队列 MQ:get($key, 10);//取出一定数量的数据 |
代码如下 | 复制代码 |
<?php /*构造函数*/ /*数据库连接*/ if (!mysql_select_db($this->db_database, $this->conn)) { /*数据库执行语句,可执行查询添加修改删除等任何sql语句*/ $result = mysql_query($this->sql, $this->conn); if (!$result) { /*创建添加新的数据库*/ /*查询服务器所有数据库*/ //以数组形式返回主机中所有数据库名 /*查询数据库下所有的表*/ /* /*取得结果数据*/ /*取得记录集,获取数组-索引和关联,使用$row['content'] */ public function fetch_array() { // public function fetch_array($query) { //获取关联数组,使用$row['字段名'] //获取数字索引数组,使用$row[0],$row[1],$row[2] //获取对象数组,使用$row->content //简化查询select //简化查询select //简化删除del //简化插入insert //简化修改update /*取得上一步 INSERT 操作产生的 ID*/ //指向确定的一条数据记录 // 根据select查询结果计算结果集条数 // 根据insert,update,delete执行结果取得影响行数 //输出显示sql语句 $server_date = date("Y-m-d"); //建立文件夹 //建立txt日期文件 //echo "建立日期文件"; //首先要确定文件存在并且可写 //将$somecontent写入到我们打开的文件中。 //echo "文件 $filename 写入成功"; echo "——错误记录被保存!"; //关闭文件 } else { //将$somecontent写入到我们打开的文件中。 //echo "文件 $filename 写入成功"; //关闭文件 } echo "<br />"; //释放结果集 //数据库选择 //查询字段数量 //取得 MySQL 服务器信息 case 2 : case 3 : case 4 : default : //析构函数,自动关闭数据库,垃圾回收机制 /*获得客户端真实的IP地址*/ } |
代码如下 | 复制代码 |
<?php function daddslashes($string, $force = 0) { |
防注入二
代码如下 | 复制代码 |
function inject_check($sql_str) { //防止注入 |