分类目录归档:未分类

php 数组引用遍历

php数组遍历默认是值传递而不是引用。

使用以下语法让php遍历引用一个数组:

foreach ( $array as & $value ) {

实例:

<?PHP
 $authors = array( "Java", "PHP", "CSS", "HTML" ); 
 foreach ( $authors as  & $val ) { 
   if ( $val == "CSS" ) $val = "Javascript"; 
   echo $val . " "; 
 } 
 unset( $val ); 
 print_r ( $authors );   
?>

注意:

$unset($val) 确保 $val 变量在循环已完成。

当循环结束时,$ val仍然保存对最后一个元素的引用。在我们的代码中更改$ val改变$ authors数组的最后一个元素。通过取消设置$ val,我们避免潜在的错误。

PHP define 和 const定义常量

php 定义常量有2种方式,

define("ROOT",$root);  // 定义一个 ROOT 常量,默认为全局

另一种方法是:

const ROOT $root;  // 也是定义一个常量

如果想给一个类定义常量,则只能使用 const

另外 PHP 的全局常量,是不需要 global 引入的,而是一个方法中引入全局变量则需要使用 global 关键字引入 ,这就使得PHP常量用的比其他语言要频繁。

为什么有时不使用ajax?而是动态页面?

在一些情况下,应该减少使用js生成页面。

这种情况通常是指增加搜索引擎的收录。

搜索引擎抓取页面时,只抓取html标签而不会抓取对应的js。

如果使用 js 动态生成html,则搜索引擎并不能正常抓取,这个问题不单单体现在 ajax,中,也体现在最近几年比较火的 vue 框架。

为什么有时使用jquery而不是vue?又或者直接使用后端模板引擎直接生成html页面,都是为了在一定程度上增强seo。

网站前台推荐动态模板引擎直接返回html或配合少量的js,而网站后台则推荐用 js 模板引擎框架,如vue。

sql 之 where 1=1 或者 where 1=2

假如后续有 0 个、一个、多个 and 条件时,一般使用 where 1=1

因为不知道第一个 and 条件是什么,where 1=1例子:

        $where = " where 1=1";
        // 指定订单状态
        if($state!=""){
            $where .= " and o.orderstate=$state";
        }
        // 指定类型
        if($type!=""){
            $where .= " and o.type='$type'";
        }

where 1=2,可用在拼接 or 条件、且个数不定时使用。

因为不知道第一个 or 条件是什么,where 1=2例子:

        // 关键字
        if($skword!=""){
            $where .= " and (1=2";
            if(is_numeric($skword)){
                $where .= " or o.`proid`=$skword";
            }
            $where .= " or l.`title` like '%$skword%'";
            $where .= ")";
        }

毕业论文查重通过后能不能修改?

能修改。

查重率不能过高是学校要求的,而在查重通过后发现有部分不太通顺此时可以修改,修改后可以再查重或不查重。

如果不再次查重,可以直接提交上次的查重报告,学校会有5%的几率进行抽查,如果学校抽中你的论文进行查重且重复率高于指标,则可能会面临很大问题。

综上,如果查重通过,进行少量修改可以不进行再次查重,如果进行大变动为保险起见可以进行再次查重。

mysql计算表大小、数据库大小、获取表名、表中行数、索引大小、引擎等基本信息。

只需要一个函数即可:

show table status;

你将得到一个多列的信息,包含了上述数据,每一行包含了一个表信息、如表名、数据大小、索引大小、引擎、行数等

再通过程序计算相加,可得到数据库总大小。

简单命令,例如:

show tables;  // 表名

show databases; // 数据库名

show index from tables_name;  // 查询一个表的索引

其他:

1. show tables或show tables from database_name; — 显示当前数据库中所有表的名称。
2. show databases; — 显示mysql中所有数据库的名称。
3. show columns from table_name from database_name; 或show columns from database_name.table_name; — 显示表中列名称。
4. show grants for user_name; — 显示一个用户的权限,显示结果类似于grant 命令。
5. show index from table_name; — 显示表的索引。
6. show status; — 显示一些系统特定资源的信息,例如,正在运行的线程数量。
7. show variables; — 显示系统变量的名称和值。
8. show processlist; — 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
9. show table status; — 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
10. show privileges; — 显示服务器所支持的不同权限。
11. show create database database_name; — 显示create database 语句是否能够创建指定的数据库。
12. show create table table_name; — 显示create database 语句是否能够创建指定的数据库。
13. show engines; — 显示安装以后可用的存储引擎和默认引擎。
14. show innodb status; — 显示innoDB存储引擎的状态。
15. show logs; — 显示BDB存储引擎的日志。
16. show warnings; — 显示最后一个执行的语句所产生的错误、警告和通知。
17. show errors; — 只显示最后一个执行语句所产生的错误。
18. show [storage] engines; –显示安装后的可用存储引擎和默认引擎。

PDO::ATTR_CASE

pdo的一个连接属性

  • PDO::ATTR_CASE:强制列名为指定的大小写。
    • PDO::CASE_LOWER:强制列名小写。(值为2)
    • PDO::CASE_NATURAL:保留数据库驱动返回的列名。(默认,值为0)
    • PDO::CASE_UPPER:强制列名大写。(值为1)

创建一个pdo实例,并设置或读取其属性

$DB = DB::getConn();
echo $DB->getAttribute(PDO::ATTR_CASE);

sql之update语句返回0

在命令行,或navicat,或php pdo中执行 update语句时,如果更新的值和原来的值相同,则返回0。

如果使用java的jdbc执行,则返回1。

两者的不同的原因是,jdbc计算的是匹配(match)到的行,而pdo计算的是收影响(affect)的行。

这个属性是在获取连接对象时指定的。

例如java指定连接参数:

jdbc:mysql://ip:port/db? useAffectedRows=true&…

或者pdo指定连接信息:(php5.3开始)

<? php
    $p = new PDO($dsn, $u, $p, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));  //使用found_rows
?>

使用 found_rows 只能在创建连接时使用,然后就可以在update语句中忽略update相同值带来返回0的影响。

    /**
     * 新增、更新、删除语句
     * @param string $sql
     * @return mixed
     */
    public static function update(string $sql){
        $DB = self::getConn();
        $pre = $DB->prepare($sql);
        $pre->execute();
        return $pre->rowCount();
    }

此时,php的rowCount()无论在update是否重复值,均会返回非零值。

此时,在判断sql是否执行成功,只需要 if($res) 即可。

sql查询结果集工具封装

sql查询结果集,无非有4种格式。

单行单列,也就是一个数据。(用作比较值)

单行多列,也就是一行。

多行单列,简单来说是一列。(用in语句)

多行多列,也就是一张新表。(实际上前几种也可看做表)

对于结果集的封装,推荐强制校验数据格式,以php为例,:

getOne:单行单列封装为一个变量。

getArr:单行多列或多行单列封装为一个数组。

getArrList:多行多列,封装为二维数组。

其他常用:

getPage:分页,封装为数组,其中list为数据,pageInfo为页面info

getLastId:获取最后一个生成的主键。

update:一些insert、update、delete操作,返回影响条数

getNames:获取返回的字段名,封装为数组。

getDbSize:获取数据库大小

getTableSize:获取指定表大小。

showTables:获取数据库所有的表,封装为数组

showCteateTable:获取指定表的建表语句。

getVersion:获取数据库版本

setErrLevel:设置错误等级,针对错误进行不同级别的处理。