PHP链接mssql的方法
1 更改php.ini 配置文件
extension=php_mssql.dll
前面的;号去掉
2 确定ext目录下是否有php_mssql.dll文件
3 复制ntwdblib.dll php_mssql.dll php.ini复制到windows/system32
二 连接sqlserver2000
1 连接数据库
$conn= mssql_connect("localhost,1433","sa","");//假设连接的服务器是本机 sqlserver端口号为1433
2 选择要操纵的数据库
mssql_select_db("pubs");
3 执行sql语句执行任意sql语句都可以用此方法
$rs=mssql_query("sql语句");
如果执行的是查询$rs保存的就是查询的结果
如果执行的是非查询 执行成功true 执行失败false
4 关闭数据库连接释放资源
mssql_close($conn);
注意调用函数时候可以在函数名前加@表示如果执行函数失败也不会报错
如果连接失败排错顺序
1 找不到mssql_connect函数
Call to undefined function
这php配置环境问题 确定php_mssql.dll文件是否存在
2 tcp 错误
在命令行运行利用netstat-an 命令查看端口号是否可用 不能用打对sqlserver2000安装sp3补丁
3 身份验证错误
sqlserver服务器是否采用的混合身份验证,并且确定你使用的用户名与密码是否正确
三从结果集中提取数据
$rsi=mssql_fecth_array(结果集)
改函数每执行一次就读取一行数据 并且以数组的形式存储该行数据
如果没有数据改函数返回false
三 处理结果集中的数据
1 mssql_num_fields(结果集) 返回结集中表的列数
mssql_num_rows(结果集) 返回结果集中表的行数
2 mssql_fetch_field(查询结果集, 指针位置) 读列名称 可用来取得结果集中表的列名称返回一个表示列信息的对象。
使用语法:
如果没有指定指针位置数值,则系统预设取回目前指针位置的下一个未取得列名称
echo '读列名称<br>';
$frs=mssql_fetch_field($rs);//读第1列的列名称
echo $frs->name;
$frs=mssql_fetch_field($rs);//读第2列的列名称
echo $frs->name;
依次类推
也可以
$frs=mssql_fetch_field($rs,n);//读第n列的列名称
写一个循环读取全部列名称
echo '读完整列名称<br>';
for($i=0;$i<mssql_num_fields($rs);$i++)
{
$frs=mssql_fetch_field($rs,$i);
echo $frs->name."\t";
}
或者
while($frs=mssql_fetch_field($rs))
{
echo $frs->name;
}
3 读行数据
3.1 mssql_result(结果集,行数,列数或列名称) 返回结果集合中某个值
echo '读完整行数量<br>';
for ($i=0;$i<mssql_num_rows($rs);$i++)
{
for ($j=0;$j<mssql_num_fields($rs);$j++)
{
echo mssql_result($rs,$i,$j)."\t";
}
echo '<br>';
}
3.2 mssql_fetch_row函数会从查询结果处,取得目前指针所在位置的整笔完整资料,并储存为数组类型数值,执行完成后会把索引
指针移向下一笔资料。
语法格式:
mysql_fetch_row(查询结果集)
while($rows=mssql_fetch_row($rs))
{
foreach($rows as $s)
{
echo "$s";
}
echo"<br>";
}
3.3 mssql_fetch_array(查询结果指针)
函数会从查询结果处,取得目前指针所在位置的整笔完整资料,并储存为数组类型数值,执行完成后会把索引指针移向下一笔资料
。
与mssql_fecth_row区别只是访问数组时候可以用列名称字符串访问,鉴于此特点以后我们经常用此方法从结果集中提取数据!
3.4移动指针
在前面我们提到过,当mysql_fetch_row函数执行后,会将目前资料指针下移一笔。而mysql_data_seek函数的功能,则是可将目前的
资料指针移动到任何一笔资料上。
语法格式:
mssql_data_seek(查询结果指针, 资料录位置)
四 php访问sqlserver存储过程
选学
sql server存储过程
CREATE PROC ProcTest @id int, @name varchar(30)
output
as
select @name=username from users where [email=id=@id]id=@id[/email]
select * from users
php实现代码:
<?php
$userId = 2; // test parameter
$userName; // test return value
$conn = mssql_connect("localhost,1433", "sa", "") or die("Can't connect sql server");
mssql_select_db("mm_db", $conn)
$stmt = mssql_init("ProcTest", $conn) //产生预处理目的执行存储过程
mssql_bind($stmt, "@id", $userId, SQLINT4);
//为存储过程输入参数付值,注意必须付的值必须是变量
mssql_bind($stmt, "@name", $userName, SQLVARCHAR, true);//捕获输出参数
//执行存储过程
$rs = mssql_execute($stmt);
//向下移动游标以读取第一个查询结果的内容 mssql_next_result($rs);
//读$rs中的数据
while($rsi=mssql_fetch_array($rs))
{
echo $rsi["job_id"];
}
//读取存储过程的返回值
echo $z;
?>
五 与数据库操作相关的字符串函数
1 php配置文件 对于magic_quotes_gpc=on 表单等传输数据是对于特殊的符号进行处理比如’转换成\’进行传输。off不处理。
2 addslashes返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)等。
3 stripslashes将用addslashes()函数处理后的字符串返回原样。
extension=php_mssql.dll
前面的;号去掉
2 确定ext目录下是否有php_mssql.dll文件
3 复制ntwdblib.dll php_mssql.dll php.ini复制到windows/system32
二 连接sqlserver2000
1 连接数据库
$conn= mssql_connect("localhost,1433","sa","");//假设连接的服务器是本机 sqlserver端口号为1433
2 选择要操纵的数据库
mssql_select_db("pubs");
3 执行sql语句执行任意sql语句都可以用此方法
$rs=mssql_query("sql语句");
如果执行的是查询$rs保存的就是查询的结果
如果执行的是非查询 执行成功true 执行失败false
4 关闭数据库连接释放资源
mssql_close($conn);
注意调用函数时候可以在函数名前加@表示如果执行函数失败也不会报错
如果连接失败排错顺序
1 找不到mssql_connect函数
Call to undefined function
这php配置环境问题 确定php_mssql.dll文件是否存在
2 tcp 错误
在命令行运行利用netstat-an 命令查看端口号是否可用 不能用打对sqlserver2000安装sp3补丁
3 身份验证错误
sqlserver服务器是否采用的混合身份验证,并且确定你使用的用户名与密码是否正确
三从结果集中提取数据
$rsi=mssql_fecth_array(结果集)
改函数每执行一次就读取一行数据 并且以数组的形式存储该行数据
如果没有数据改函数返回false
三 处理结果集中的数据
1 mssql_num_fields(结果集) 返回结集中表的列数
mssql_num_rows(结果集) 返回结果集中表的行数
2 mssql_fetch_field(查询结果集, 指针位置) 读列名称 可用来取得结果集中表的列名称返回一个表示列信息的对象。
使用语法:
如果没有指定指针位置数值,则系统预设取回目前指针位置的下一个未取得列名称
echo '读列名称<br>';
$frs=mssql_fetch_field($rs);//读第1列的列名称
echo $frs->name;
$frs=mssql_fetch_field($rs);//读第2列的列名称
echo $frs->name;
依次类推
也可以
$frs=mssql_fetch_field($rs,n);//读第n列的列名称
写一个循环读取全部列名称
echo '读完整列名称<br>';
for($i=0;$i<mssql_num_fields($rs);$i++)
{
$frs=mssql_fetch_field($rs,$i);
echo $frs->name."\t";
}
或者
while($frs=mssql_fetch_field($rs))
{
echo $frs->name;
}
3 读行数据
3.1 mssql_result(结果集,行数,列数或列名称) 返回结果集合中某个值
echo '读完整行数量<br>';
for ($i=0;$i<mssql_num_rows($rs);$i++)
{
for ($j=0;$j<mssql_num_fields($rs);$j++)
{
echo mssql_result($rs,$i,$j)."\t";
}
echo '<br>';
}
3.2 mssql_fetch_row函数会从查询结果处,取得目前指针所在位置的整笔完整资料,并储存为数组类型数值,执行完成后会把索引
指针移向下一笔资料。
语法格式:
mysql_fetch_row(查询结果集)
while($rows=mssql_fetch_row($rs))
{
foreach($rows as $s)
{
echo "$s";
}
echo"<br>";
}
3.3 mssql_fetch_array(查询结果指针)
函数会从查询结果处,取得目前指针所在位置的整笔完整资料,并储存为数组类型数值,执行完成后会把索引指针移向下一笔资料
。
与mssql_fecth_row区别只是访问数组时候可以用列名称字符串访问,鉴于此特点以后我们经常用此方法从结果集中提取数据!
3.4移动指针
在前面我们提到过,当mysql_fetch_row函数执行后,会将目前资料指针下移一笔。而mysql_data_seek函数的功能,则是可将目前的
资料指针移动到任何一笔资料上。
语法格式:
mssql_data_seek(查询结果指针, 资料录位置)
四 php访问sqlserver存储过程
选学
sql server存储过程
CREATE PROC ProcTest @id int, @name varchar(30)
output
as
select @name=username from users where [email=id=@id]id=@id[/email]
select * from users
php实现代码:
<?php
$userId = 2; // test parameter
$userName; // test return value
$conn = mssql_connect("localhost,1433", "sa", "") or die("Can't connect sql server");
mssql_select_db("mm_db", $conn)
$stmt = mssql_init("ProcTest", $conn) //产生预处理目的执行存储过程
mssql_bind($stmt, "@id", $userId, SQLINT4);
//为存储过程输入参数付值,注意必须付的值必须是变量
mssql_bind($stmt, "@name", $userName, SQLVARCHAR, true);//捕获输出参数
//执行存储过程
$rs = mssql_execute($stmt);
//向下移动游标以读取第一个查询结果的内容 mssql_next_result($rs);
//读$rs中的数据
while($rsi=mssql_fetch_array($rs))
{
echo $rsi["job_id"];
}
//读取存储过程的返回值
echo $z;
?>
五 与数据库操作相关的字符串函数
1 php配置文件 对于magic_quotes_gpc=on 表单等传输数据是对于特殊的符号进行处理比如’转换成\’进行传输。off不处理。
2 addslashes返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)等。
3 stripslashes将用addslashes()函数处理后的字符串返回原样。
作者: bettywq 发布时间: 2011-05-04
感谢分享
作者: yqr1212 发布时间: 2011-05-05