php面试题.docx
- 文档编号:18499864
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:136
- 大小:88.03KB
php面试题.docx
《php面试题.docx》由会员分享,可在线阅读,更多相关《php面试题.docx(136页珍藏版)》请在冰点文库上搜索。
php面试题
1)连接:
&conn=mysql_connect(“localhost”,“joeuser”,“somepass”);
2)关闭连接:
mysql_close($conn);
3)数据库与连接建立联系:
mysql_select_db(databasename,connectionindex);
4)将SQL语句给MySQL执行:
$result=mysql_query($sql,$conn);//增删改查都是这句
5)检索数据:
返回记录数:
$number_of_rows=mysql_num_rows($result);
将记录放入数组:
$newArray=mysql_fetch_array($result);
例子:
1:
php
2:
//opentheconnection
3:
$conn=mysql_connect(“localhost”,“joeuser”,“somepass”);
4:
//pickthedatabasetouse
5:
mysql_select_db(“testDB”,$conn);
6:
//createtheSQLstatement
7:
$sql=“SELECT*FROMtestTable”;
8:
//executetheSQLstatement
9:
$result=mysql_query($sql,$conn)ordie(mysql_error());
10:
//gothrougheachrowintheresultsetanddisplaydata
11:
while($newArray=mysql_fetch_array($result)){
12:
//giveanametothefields
13:
$id=$newArray['id'];
14:
$testField=$newArray['testField'];
15:
//echotheresultsonscreen
16:
echo“TheIDis$idandthetextis$testField
”;
17:
}
18:
?
>
php
$dbms=’mysql’;//数据库类型Oracle用ODI,对于开发者来说,使用不同的数据库,只要改这个,不用记住那么多的函数了
$host=’localhost’;//数据库主机名
$dbName=’test’;//使用的数据库
$user=’root’;//数据库连接用户名
$pass=”;//对应的密码
$dsn=”$dbms:
host=$host;dbname=$dbName”;
//
try{
$dbh=newPDO($dsn,$user,$pass);//初始化一个PDO对象,就是创建了数据库连接对象$dbh
echo”连接成功
”;
/*你还可以进行一次搜索操作
foreach($dbh->query(‘SELECT*fromFOO’)as$row){
print_r($row);//你可以用echo($GLOBAL);来看到这些值
}
*/
$dbh=null;
}catch(PDOException$e){
die(“Error!
:
”.$e->getMessage().”
”);
}
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:
array(PDO:
:
ATTR_PERSISTENT=>true)变成这样:
$db=newPDO($dsn,$user,$pass,array(PDO:
:
ATTR_PERSISTENT=>true));
?
>
★数据库查询:
上面我们已经进行了一次查询,我们还可以使用如下的查询:
php
$db->setAttribute(PDO:
:
ATTR_CASE,PDO:
:
CASE_UPPER);//设置属性
$rs=$db->query(“SELECT*FROMfoo”);
$rs->setFetchMode(PDO:
:
FETCH_ASSOC);
$result_arr=$rs->fetchAll();
print_r($result_arr);
?
>
以上因为用到setAttribute()方法,放上那两个参数,把字段名强制转换成大写。
下面列出多有PDO:
:
setAttribute()的参数:
•PDO:
:
ATTR_CASE:
强制列名变成一种格式,详细如下(第二个参数):
oPDO:
:
CASE_LOWER:
强制列名是小写.
oPDO:
:
CASE_NATURAL:
列名按照原始的方式
oPDO:
:
CASE_UPPER:
强制列名为大写.
•PDO:
:
ATTR_ERRMODE:
错误提示.
oPDO:
:
ERRMODE_SILENT:
不显示错误信息,只显示错误码.
oPDO:
:
ERRMODE_WARNING:
显示警告错误.
oPDO:
:
ERRMODE_EXCEPTION:
抛出异常.
•PDO:
:
ATTR_ORACLE_NULLS(不仅仅是ORACLE有效,别的数据库也有效):
)指定数据库返回的NULL值在php中对应的数值。
oPDO:
:
NULL_NATURAL:
不变.
oPDO:
:
NULL_EMPTY_STRING:
EmptystringisconvertedtoNULL.
oPDO:
:
NULL_TO_STRING:
NULLisconvertedtoanemptystring.
•PDO:
:
ATTR_STRINGIFY_FETCHES:
Convertnumericvaluestostringswhenfetching.Requiresbool.
•PDO:
:
ATTR_STATEMENT_CLASS:
Setuser-suppliedstatementclassderivedfromPDOStatement.CannotbeusedwithpersistentPDOinstances.Requiresarray(stringclassname,array(mixedconstructor_args)).
•PDO:
:
ATTR_AUTOCOMMIT(availableinOCI,FirebirdandMySQL):
Whethertoautocommiteverysinglestatement.
•PDO:
:
MYSQL_ATTR_USE_BUFFERED_QUERY(availableinMySQL):
Usebufferedqueries.
例子中的$rs->setFetchMode(PDO:
:
FETCH_ASSOC);是PDOStatement:
:
setFetchMode(),对返回类型的声明。
有如下:
PDO:
:
FETCH_ASSOC–关联数组形式
PDO:
:
FETCH_NUM–数字索引数组形式
PDO:
:
FETCH_BOTH–两者数组形式都有,这是缺省的
PDO:
:
FETCH_OBJ–按照对象的形式,类似于以前的mysql_fetch_object()
更多返回类型声明(PDOStatement:
:
方法名)看手册。
★插入,更新,删除数据,
$db->exec(“DELETEFROM`xxxx_menu`wheremid=43″);
•简单的总结一下上面的操作:
查询操作主要是PDO:
:
query()、PDO:
:
exec()、PDO:
:
prepare()。
PDO:
:
query()主要是用于有记录结果返回的操作,特别是SELECT操作,
PDO:
:
exec()主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作,它返回的结果是当前操作影响的列数。
PDO:
:
prepare()主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大,不是本文能够简单说明白的,大家可以参考手册和其他文档。
获取结果集操作主要是:
PDOStatement:
:
fetchColumn()、PDOStatement:
:
fetch()、PDOStatement:
:
fetchALL()。
PDOStatement:
:
fetchColumn()是获取结果指定第一条记录的某个字段,缺省是第一个字段。
PDOStatement:
:
fetch()是用来获取一条记录,
PDOStatement:
:
fetchAll()是获取所有记录集到一个中,获取结果可以通过PDOStatement:
:
setFetchMode来设置需要结果集合的类型。
另外有两个周边的操作,一个是PDO:
:
lastInsertId()和PDOStatement:
:
rowCount()。
PDO:
:
lastInsertId()是返回上次插入操作,主键列类型是自增的最后的自增ID。
PDOStatement:
:
rowCount()主要是用于PDO:
:
query()和PDO:
:
prepare()进行DELETE、INSERT、UPDATE操作影响的结果集,对PDO:
:
exec()方法和SELECT操作无效。
★事务和自动提交
至此,您已经通过PDO连接到了mysql,在发出查询之前,您应该理解PDO是如何管理事务的。
如果之前没有接触过事务,那么首先要知道事务的4个特征:
原子性(Atomicity)、一致性(Consistency)、独立性(Isolation)和持久性(Durability),即ACID。
用外行人的话说,对于在一个事务中执行的任何工作,即使它是分阶段执行的,也一定可以保证该工作会安全地应用于数据库,并且在工作被提交时,不会受到来自其他连接的影响。
事务性工作可以根据请求自动撤销(假设您还没有提交它),这使得脚本中的错误处理变得更加容易。
事务通常是通过把一批更改积蓄起来、使之同时生效而实现的。
这样做的好处是可以大大提高这些更新的效率。
换句话说,事务可以使脚本更快,而且可能更健壮(不过需要正确地使用事务才能获得这样的好处)。
∙0位粉丝
5楼
•提供给预处理语句的参数不需要用引号括起来,驱动程序会处理这些。
如果应用程序独占地使用预处理语句,那么可以确保没有SQL入侵发生。
(然而,如果您仍然将查询的其他部分建立在不受信任的输入之上,那么就仍然存在风险)。
预处理语句是如此有用,以致PDO实际上打破了在目标4中设下的规则:
如果驱动程序不支持预处理语句,那么PDO将仿真预处理语句。
smarty:
解决php和html代码分离。
1.1smarty安装
1>下载
2>解压后libs文件夹,smarty核心文件夹。
拷贝到你的工作目录。
libs/Smarty.class.php
3>和libs平级的目录下,创建文件夹
templates网页模板:
*.html***********
templates_c编译后的代码
configs配置文件
cache缓存所有的模板
1.2smarty的配置
1、案例
smarty_02.php
require_once(“libs/Smarty.class.php”);//引入
$smarty=newSmarty();//实例化一个对象。
$smarty->assign(“awt”,$a);//为模板当中的变量赋值。
同时可为数组赋值
$smarty->display(“smarty_02.htm”);//模板页调用
smarty_02.htm
可以调用数组。
?
?
?
?
?
?
?
?
?
2、smarty配置。
/*改变smarty的配置目录结构。
$smarty->templates=“a/templates”;
$smarty->templates_c=“a/templates_c”;
$smarty->configs=“a/configs”;
$smarty->cache=“a/cache”;
*/
3、模板页当中,如果写样式,因为有{},引起语义混乱,出错。
1》新建css文件。
把样式写在css文件中,避免了语义混乱了。
在模板中如果调用css样式,是以php文件为主。
2》可以改变模板中的定界符“{}”==》“
–{}–>”
$smarty->left_delimiter=“
–{“;
$smarty->right_delimiter=“}–>”;
smarty语法
1、控制结构
–{if条件1}–>
条件1成立的代码
–{elseif条件2}–>
条件1成立的代码
–{elseif条件3}–>
条件3成立的代码
……….
–{else}–>
以上条件都不成立执行else
–{/if}–>
2、循环结构
whilefordo..whileforeach
1》foreach
格式:
{foreachfrom=数组名称item=数组当前元素名}
循环体。
{/foreach}
例:
//————————-测试foreach———————–
2》section
格式:
{sectionname=”当前元素”loop=”数组名称”}
循环体
{/section}
例:
//————————-测试section———————–
pdo主要是用来对数据库访问的。
不同数据库在访问时,采用相同方法名称,
解决了数据库连库不统一问题。
mysql_connect—-mysql
oci_connect—-oracle
dbase_open——dbase
连库可以,但是没有同意标准,每次连库,都需要找对应的连库方法。
1.1pdo特点:
性能:
比传统方式效率高。
运行时扩展:
pdo是模块化的。
能在项目运行时加载数据库的驱动。
1.2pdo如何安装
php.ini查找
找到扩展配置位置添加extension=php_pdo_mysql.dll如果有,把前面分号去掉。
extension=php_pdo.dll也要打开。
重启apache
1、创建pdo对象的格式
$db=newPDO(“mysql:
host=localhost;dbname=数据库名称”,“用户名”,“密码”);//连库
2setAttribute()为数据库连接设置属性。
格式:
setAttribute(PDO:
:
ATTR_CASE,PDO:
:
CASE_UPPER);
PDO:
:
ATTR_CASE获取结果集的时候,关联数组的索引时大写还是小写。
PDO:
:
CASE_UPPER:
大写
PDO:
:
CASe_LOWER:
小写。
PDO:
:
CASE_NORMAL:
默认。
3、query()执行sql的
$pdoObject->query($sql);
4、setFetchMode(PDO:
:
FETCH_ASSOC)设置获取结果集的返回类型。
PDO:
:
FETCH_ASSOC只返回关联数组。
PDO:
:
FETCH_NUM只返回数字下标数组。
PDO:
:
FETCH_BOTH默认的,关联数组+数字下标的数组。
5fetchAll()从结果集但中抽取数据,返回一个数组。
6exec执行sql语句且返回受影响的行数。
(insertdeleteupdate)mysql_affected_rows
7rowCount()//获取的是select的行数。
mysql_num_rows
必须要先去到结果集对象,用结果集对象调用。
例子:
$sql=“select*fromcategory”;
$result=$db->query($sql);//执行sql
$rowCount=$result->rowCount();
8prepare()生成一个查询对象,select,不会立即执行。
$obj=$db->prepare(“select*fromtest”);
9execute()执行查询对象。
$obj->execute()//执行查询对象。
有循环来遍历。
10错误的处理
捕获异常。
try{
//正常
}catch(){
//错误捕获。
}
try{
$db=newPDO(“mysql:
host=localhost;dbname=test”,”root”,”root”);
}catch(PDOException$e){//捕获得错误。
echo$e->getMessage();//错误信息
}
绑定事件
1bind(事件名称,function(){})
2元素.事件名称(function(){
})
删除事件:
格式:
unbind(事件类型,要删除的函数);
模拟操作
trigger()自动触发事件,在页面加载完毕后自动触发。
元素.trigger(“事件名称”)。
例子:
$(function(){//当页面加载完毕后,会为bt按钮绑定上click,但是不单击是不执行。
$(“#bt”).click(function(){
alert($(“#myDiv”).text());
})
$(“#bt”).trigger(“click”);//自动调用bt的click方法。
})
注意:
trigger(参数1,参数2)可以有参数
第一个参数是自定义事件名称。
第二个参数是传给事件处理函数的附加数据,以数组形式传递。
1、count求数组元素个数
sizeof
2、explode(符号,字符串)用固定的符号去切割字符串。
切割后返回一个数组。
3、end(数组名称)得出数组的最后一个元素。
4、join(符号,数组名称)用符号把数组连成字符串
implode
5、array_reverse(数组名称)把数组反转。
6、array_keys(数组名称)返回原有数组下标所组成的新数组。
7、array_values($arr)会把数组中的元素的值赋给新数组,新数组是以数字为下标
(关联数组转成数字下标数组)
8、list()为一组变量赋值,变量的值与数组中的值对应。
注意:
list中的变量个数不一定要和数组中值的个数对应。
$arr=array(“中国”,”tarena”,123,”zs”,”ak”);
list($a,$b,,,$f)=$arr;
echo$a.”–”.$b.”–”.$f;
1substr(字符串,起始位,长度)截取字符串****
2md5($str)字符串加密的。
****
3strtolower($str)转换成小写字母
4strtoupper($str)转换成大写。
5截取字符串;mb_substr($str,起始位置,长度,“字符集”);****
6ucfirst($str)段落首字母大写。
7ucwords($str)每个单词首字母都要大写。
8strpos($str,目标字符)求字符在字符串中的位置,第一次出现的位置。
***
9strrpos($str,目标字符)最后一次出现的位置
10str_replace(目标字符,替换字符,$str)在字符串中用替换字符替换掉目标字符。
****
strlen:
求字符串长度;
$_POST:
接收;
$_GET:
发送;
array():
定义数组(可多维数组);
rand—产生一个随机整数
intrand([intmin,intmax])
count—计算数组中的单元数目或对象中的属性个数
intcount(计数函数)(mixedvar[,intmode]);
range–建立一个包含指定范围单元的数组
arrayrange(mixedlow,mixedhigh[,numberstep])
shuffle—将数组打乱
boolshuffle(array&array)
array_slice—从数组中取出一段
arrayarray_slice(arrayarray,intoffset[,intlength[,boolpreserve_keys]])
array_splice–把数组中的一部分去掉并用其它值取代
arrayarray_splice(array&input,intoffset[,intlength[,arrayreplacement]])
ontinue在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。
break结束当前for,foreach,while,do-while或者switch结构的执行。
unset—释放给定的变量
1.字符串的分割explode();和合并implode();
2.比较两个字符串的大小strcmp();
3.字符串的替换str_replace();
4.删除字符串两头空白trim();删除字符串尾部空白rtrim();删除字符串开始部分空白ltrim();
5.//获取字符串的长度strlen();
6.substr();//截取字符串
7.对字符串大小转换strtoupper();strtolower();
8.转换字符串到数组str_split();
9.字符加密md5();
ucfirst,ucwords字符大写
10.strip_tags();过滤掉htmlxmlphp标签代码
11.strrev()对字符串倒序。
双引号内的变量或转义符号可以被解释执行,单引号则不行。
PHP方面:
1,echoprintprint_r的区别
Echo是PHP语句,print与print_r是函数,语句没有返回值,函数可以有返回值。
Print只能打印简单类型变量的值。
Print_r可以打印复杂变量值(数组或对象)
Echo输出一个或者多个字符串。
2,mysql_fetch_array()与mysql_fetch_row()区别
mysql_fetch_array()返回根据从结果集取得的行生成的数组,如果没有更多行,返回false除了将数据以字段做索引外,还可以用字段名作为索引。
mysql_fetch_row()返回从结果集中取得一行作为枚举数组,返回一个数字索引的数组,偏移量从0开始。
my
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- php 试题