PHP学习之PHP运算符

 更新时间:2016年11月25日 16:40  点击:1850

PHP运算符

下面我分别看一下PHP3的算术、字符串、逻辑与比较等运算符。   
1、算术运算符
  +:  $a $b 加 $a加上$b   -:  $a - $b 减 $a减去$b   *:  $a * $b 乘 $a乘以$b   /:  $a / $b 除 $a除以$b   %:  $a % $b 取模 $a除以$b的余数 假如两个操作数都是整型值(字符串将被转换为整型值),除号("/") 返回整型值(整除的值)。假如任一个操作数是浮点值,则做浮点除法。
2 字符串运算符   
字符串操作符只有字符串连接符 (".")。   $a = "Hello ";   $b = $a . "World!"; // now $b = "Hello World!"
3、赋值运算符   
基本的赋值运算符是 "="。   一个赋值表达式的值就是所赋给的值。例如, 表达式 $a = 3 的值是3。 这答应你这样做一些复杂的事情:     $a = ($b = 4) 5; // 现在 $a 等于 9, $b为4 。   除了基本赋值符外,还有"复合运算符"。对于所有的二进制数和字符串,答应你做变量自我复合运算。
例如:   =: $a = 3;   +=:$a = 5; // 把$a 设成 8, 也就是: $a = $a 5;      $b = "Hello ";   . :$b .= "There!"; // 把 $b 设成 "Hello There!", 就象 $b = $b . "There!";
4、 位运算符
  位运算答应你对指定的数据置位或复位。   &:与运算,$a & $b 与 $a和$b都被置位则结果被置位   |:或运算,$a | $b 或 $a或$b有一个被置位则结果被置位   ~:非运算,~ $a 非 $a没有被置位则结果被置位
5、 逻辑运算符
 and:  $a and $b 与 $a和$b同时为真则结果为真  or :  $a or $b 或 $a或$b有一个为真则结果为真  xor:  $a xor $b 异或 $a和$b不同时为真则结果为真  ! :  ! $a 非 $a为假则结果为真  &&:  $a && $b 与 $a和$b同时为真则结果为真  ||:  $a || $b 或 $a或$b有一个为真则结果为真   比较两个变量时,"与"和"或"运算有两种运算符这是以为两种运算符有不同的优先级 6、 比较运算符   比较运算符,就象名字一样,答应你比较两个值。   ==: $a == $b 等于 $a等于$b结果为真   !=: $a != $b 不等于 $a不等于$b结果为真   < : $a < $b 小于 $a小于$结果为真   > : $a > $b 大于 $a大于$b结果为真   <=: $a <= $b 小于等于 $a小于或等于$b结果为真   >=: $a >= $b 大于等于 $a大于或等于$b结果为真

PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护
不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合,假如其中一方更变,则显然难以维护。
但是使用存储过程至少有两个最明显的优点:速度和效率。
使用存储过程的速度显然更快。
在效率上,假如应用一次需要做一系列SQL操作,则需要往返于PHP与ORACLE,不如把该应用直接放到数据库方以减少往返次数,增加效率。
但是在INTERNET应用上,速度是极度重要的,所以很有必要使用存储过程。
偶也是使用PHP调用存储过程不久,做了下面这个列子。

代码:--------------------------------------------------------------

//建立一个TEST表
CREATE TABLE TEST (
ID NUMBER(16) NOT NULL,
NAME VARCHAR2(30) NOT NULL,
PRIMARY KEY (ID)
);

//插入一条数据
INSERT INTO TEST VALUES (5, 'PHP_BOOK');

//建立一个存储过程
CREATE OR REPLACE PROCEDURE PROC_TEST (
p_id IN OUT NUMBER,
p_name OUT VARCHAR2
) AS
BEGIN
SELECT NAME INTO p_name
FROM TEST
WHERE ID = 5;
END PROC_TEST;
/

--------------------------------------------------------------------------------



PHP代码:--------------------------------------------------------------------------------

<?php

//建立数据库连接
$user = "scott"; //数据库用户名
$password = "tiger"; //密码
$conn_str = "tnsname"; //连接串(cstr : Connection_STRing)
$remote = true //是否远程连接
if ($remote) {
$conn = OCILogon($user, $password, $conn_str);
}
else {
$conn = OCILogon($user, $password);
}

//设定绑定
$id = 5; //预备用以绑定的php变量 id
$name = ""; //预备用以绑定的php变量 name

/** 调用存储过程的sql语句(sql_sp : SQL_StoreProcedure)
* 语法:
* BEGIN 存储过程名([[:]参数]); END;
* 加上冒号表示该参数是一个位置
**/
$sql_sp = "BEGIN PROC_TEST(:id, :name); END;";

//Parse
$stmt = OCIParse($conn, $sql_sp);

//执行绑定
OCIBindByName($stmt, ":id", $id, 16); //参数说明:绑定php变量$id到位置:id,并设定绑定长度16位
OCIBindByName($stmt, ":name", $name, 30);

//Execute
OCIExecute($stmt);

//结果
echo "name is : $name<br>";

?>

今天配置了新服务器,配置是IIS php,结果运行时发现php连接远程mssql数据库出错,出错代码如下:
Warning: mssql_connect(): Unable to connect to server:

想想以前都是没问题的,怎么回事呢?后来去网上搜索,发现一篇文章,才发现原来服务器是需要安装mssql才能用php连接mssql的,本来新服务器上我是不需要用到mssql的,但是现在没办法了,只能把它装上了,安装了mssql之后就没问题了。

我在想,假如是在linux上面的apache php会怎样呢,不可能需要安装mssql吧,呵呵,晕了。

下面是找到的一篇文章。

php配置:
在php.ini文件里设置如下,找到
;extension=php_mssql.dll 把前面的分号去掉
找到extension_dir = d:extension
你的php.ini里面可能不是d:extension
改成在php安装目录下面的extensions目录下面的php_mssql.dll,所在的路径,假如你没有把它移动到其他地方(假设你的php安装路径是d:php)
就改成extension_dir=d:phpextensions
然后重新启动web服务器


这一点很轻易做到,但是做完这样的设置后还是连不上,错误的信息如下:

MS SQL Server 数据库连接错误!请检查数据库主机变量设置是否正确!!!

而主机的变量设置我是一遍一遍的检查,那些设置是一点问题都没有的,翻遍网页,找到了下面的这点蛛丝马迹:


php.com资料:

I am trying to connect to SQL Server 2000 from PHP
I bumped to following warning:
Warning: mssql_connect(): Unable to connect to server: SERVERPortal
....... on line 5

on line 5 there is:
$db_connect = mssql_connect('SERVERPortal', 'sa', 'my_passwd');

I did the following
1.enabled php_mssql.dll extension in PHP.ini
2.every dll is in proper place(System32 or PHP folder),including ntwdblib.dll

I search lots of profile throught web ,but no one give me proper answer to resolve it.

after a few hour ,I found the problem was caused by
ntwdblib.dll ,which version is 7.00.839 ,when I replaced old ntwdblib.dll with the new

ntwdblib.dll ,which version is 8.00.194 ,all problem are solved.

We had some, read A LOT, of problems with MSSQL under Windows 2003.
We had 2 the same windows, php, php-ini, everything machines but only one could connect.

Unable to connect was the error message.

Finnaly we checked the version of ntwdblib.dll and the one distributed with PHP was 7.00....

and the version of the one on the SQL Server install was 8.00.... so we copied this one in

the php and apache dir and it worked.

问题就这样被找到了,惹祸的是它 ntwdblib.dll

ntwdblib.dll的主要作用是提供sql server连接服务。

我用的php版本是4.3.9,在安装它的服器的 windows/system32/ 下我查到ntwdblib.dll文件的版本是2000.2.8.0 ,这个版本支持的是sql server 7.0, 因为安装PHP时会把dlls下面的所有文件覆盖到系统

目录下,所以当我用它去连接 sql server 2000 的时候当然会是无法连接了。

后来我在一台正常安装sql server 2000 的服务器上查到 ntwdblib.dll的版本是 2000.80.2039.0,我把这个文件拷过去,覆盖掉以前的版本,重启服务器后,一切正常。

补充:假如数据库名的开头是数字时也会提示无法打开,这时要做的很简单,把数据库的名字用中括号 [ ]
括起来就搞定了,如 123bbs 改写成 [123bbs]就没有问题了,另外假如你的数据库名字与sql server中的保留字冲突的话也会出现这种情况,用中括号的方法一样可以解决。
最终,PHP无法正确连接sql server 2000的问题终于解决了,虽然耗费大半天的时间,但收获还是很大的,现在把它贴出来,也让碰到同样问题的兄弟们少走一些弯路。

<body>
<script language="Javascript">
<!--
document.write('<div id="Today"></div>');
var a=0;
var Y=[color=#FF0000]<?echo date('Y')?>[/color],M=[color=#FF0000]<?echo date('n')?>[/color],D=[color=#FF0000]<?echo date('j')?>[/color];
function clock() {
sec=[color=#FF0000]<?echo strtotime('8 hours')?>[/color] a; //(GMT 8:00)时区:中国标准时间
S=sec`; //秒
I=Math.floor(sec/60)`; //分
H=Math.floor(sec/3600)$; //时
W='四五六日一二三'.charAt(Math.floor(sec/86400)%7); //星期几
if(S<10) S='0' S;
if(I<10) I='0' I;
if(H<10) H='0' H;
if (H=='00' & I=='00' & S=='00') D=D 1; //日进位
if (M==2) { //判定是否为二月份******
if (!Y%4>0) { //是闰年(二月有28天)
if (D==30){M =1;D=1;} //月份进位
}
else { //非闰年(二月有29天)
if (D==29){M =1;D=1;} //月份进位
}
}
else { //不是二月份的月份******
if (M==4 || M==6 || M==9 || M==11) { //小月(30天)
if (D==31) {M =1;D=1;} //月份进位
}
else { //大月(31天)
if (D==32){M =1;D=1;} //月份进位
}
}
if (M==13) {Y =1;M=1;} //年份进位
timeStr=Y '年' M '月' D '日' ' 星期' W ' ' H ':' I ':' S;
Today.innerHTML = timeStr;
a ;
}
clock(); //这行可以不要,只为初始化...
setInterval(clock,1000);
//-->
//判定闰年的规则是,能被4整除,但能被100整除的不是闰年,能被400整除为闰年.
//像1600、2000、2400年都是闰年,而1700、1800、1900、2100年都是平年(非闰年)
//PHP目前只能处理1970-2038年的时间段,所以在这不用理会100及400的这整除事件
</script>
</body>

<?php

class myftp {

var $connector;
var $getback;

function connect($ftp_server, $uname, $passwd){
// Baut grundlegende FTP Connection auf
$this->connector = @ftp_connect($ftp_server);
$this->login_result = @ftp_login($this->connector, "$uname", "$passwd");
if ((!$this->connector) ││ (!$this->login_result))
{
echo "FTP connection has failed! n";
echo "Attempted to connect to $ftp_server for user $uname n";
die;
} else {
echo "Connected to $ftp_server, for user $uname n";
}
}

function lastmodtime($value){
$getback = ftp_mdtm ($this->connector,$value);
return $getback;
}

function changedir($targetdir){
$getback = ftp_chdir($this->connector, $targetdir);
return $getback;
}
function getdir(){
$getback = ftp_pwd($this->connector);
return $getback;
}

function get_file_list($directory){
$getback = ftp_nlist($this->connector, $directory);
return $getback;
}

function get_file($file_to_get, $mode, $mode2){
$realfile = basename($file_to_get);
$filename = $realfile;

$checkdir = @$this->changedir($realfile);
if ($checkdir == TRUE){
ftp_cdup($this->connector);
echo "n[DIR] $realfile";
}else{
echo "..... ". $realfile ."n";
$getback = ftp_get($this->connector, $filename, $realfile, $mode);
if ($mode2){
$delstatus = ftp_delete($this->connector, $file_to_get);
if ($delstatus == TRUE){
echo "File $realfile on $host deleted n";
}
}
}
return $getback;
}

[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • c#的异或运算符介绍

    这篇文章介绍了c#的异或运算符,有需要的朋友可以参考一下...2020-06-25
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • 轻松学习C#的运算符

    轻松学习C#的运算符,对C#的运算符感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的运算符。...2020-06-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • C#中38个常用运算符的优先级的划分和理解

    这只我自己在学C#中的一些总结,其中对于各级的划分方式、各操作符的优先级的理解并不见得正确,只是自己的看法,拿出来与大家分享...2020-06-25
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • R语言运算符知识点讲解

    在本篇文章里小编给大家分享了一篇关于R语言运算符知识点讲解内容,有兴趣的朋友们可以参考下。...2021-05-06
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • C++编程中的或||、与&&、非!逻辑运算符基本用法整理

    这篇文章主要介绍了C++中的或||、与&&、非!逻辑运算符基本用法整理,是C++入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
  • JS不要再到处使用绝对等于运算符了

    这篇文章主要介绍了JS不要再到处使用绝对等于运算符了,对此感兴趣的同学,可以参考下...2021-05-01
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • 值得分享和收藏的Bootstrap学习教程

    这绝对是一套值得分享和大家收藏的Bootstrap学习教程,完整的知识体系,系统的学习资料,帮助大家开启Bootstrap学习之旅,享受Bootstrap带给大家的奇妙乐趣...2016-05-14
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11