Code Monkey home page Code Monkey logo

cms's People

Contributors

wscats avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cms's Issues

CMD配置PHP命令

1.寻找PHP文件夹路径

因为我的PHP环境是用集成包XAMPP安装的
所以我先找到我的xampp的安装目录
最重要是找到PHP的目录,里面最重要就是找到php.ini,php.cmd和ext文件夹

D:\xampp\php

image

2.添加环境变量

打开我的电脑->属性->高级->环境变量->系统变量->Path->编辑

image

添加下面两个路径

D:\xampp\php\ext;D:\xampp\php

3.执行PHP脚本

定位到对应的文件夹,执行php XXX.php来执行php脚本文件
image

CMD配置CURL命令

下载

在官网下载CURL工具包 下载地址
选择下载window64位的工具压缩包

Win64 x86_64 zip 7.53.1 binary SSL SSH Marc Hörsken 849 KB

image

配置

解压工具包,找到src文件夹,里面有一个curl.cmd文件
image
配置路径到环境变量,例如我的路径为C:\Users\Administrator\Downloads\curl\src

打开我的电脑->属性->高级->环境变量->系统变量->Path->编辑

image

执行

curl --help

如果命令出现以下内容,则说明配置成功
image

Possible XSS vulnerabilities

Hello,

I would like to report for some possible XSS vulnerabilities.

For example,

The injection through the news title.
The source will be inserted in the DB, then it will be passed from the DB to the view.

In file cms-master\application\controllers\news_api.php

public function insert_news(){
$this->load->model('news_model');
$data = array(
		//接收新闻的标题 用$this->input->post方法替换$_POST方法更好
		'title' => $this->input->get('title'),
		//接收新闻的内容
		'text' => $this->input->get('text'),
		//接收所选的频道
		'channel_id' => 6,
		//接收图片的地址
		//'image' => $this->input->post('image'),
		//根据所选的频道id查看频道的具体名字
		'channel_name' => "推荐",
	);
$this->news_model->add_data($data);
}
    public function add_data($data)
    {
    		$this->load->database();
        	$this->db->insert('news', $data);
    }

Then, In file cms-master\application\controllers\news.php

	public function show()
	{
		$this->load->helper('url');
		$this->load->model('news_model');
		$this->load->model('channel_model');
		//获取id和channel的对应关系表
		$data['channels'] = $this->channel_model->show_data();
		//从数据库新获取渲染到列表
		$data['news'] = $this->news_model->show_data();
		//将拿回来的图片字符串转化为数组的形式方便视图渲染
		$i = 0;
		foreach($data['news'] as $item){
			$data['news'][$i]['image'] = explode(",",$item['image']);
			$i++;
		}
		//显示退出登陆的页面
		//$this->load->view ('login/logout');
		$this->load->view('news/news_show', $data);
	}
    public function show_data()
    {
    		$this->load->database();
        $query = $this->db->get("news");
        return $query->result_array();
    }

Finally, in the view file cms-master\application\views\news\news_show.php

<?php 
foreach ($news as $item): ?>
//..
<h4 class="weui-media-box__title"><?php echo $item['title'];?></h4>

CI上传图片

表单上传

官方文档文件上传类
这里有一点要注意的是
你需要一个目录来保存上传的图片,在 CodeIgniter 的安装根目录下创建一个 uploads 目录, 并将它的权限设置为 777
在 Mac 里面你可以这样设置 777 权限
image

sudo chmod -R 777 uploads

image
上传成功后如图
image

ajax 上传

参考 CI 框架怎么使用 ajax 方式无刷新上传文件/图片
在这里不断尝试后发现uploadify这个插件很好解决这个问题
在 php 的视图引入,记得 uploadify 的官网下载 uploadify 插件包的没有 jquery 这个库,记得额外引入

<script src="<?php echo base_url('assets/lib/jquery.js');?>"></script>
<script src="<?php echo base_url('assets/lib/uploadify/jquery.uploadify.js');?>"></script>
<link
  rel="stylesheet"
  href="<?php echo base_url('assets/lib/uploadify/uploadify.css');?>"
/>

表单,这里要注意的你可以放入任何表单,因为是 ajax 上传的,其实不会影响你所在的表单原来对服务器的请求,name 属性值记得跟 js 里面的值对应,跟后台对应,在上传完图片可以获取图片地址,因为 uploadify 支持上传多张图片,可以在前端拼接成一个数组,然后通过表单提交到后台

<form>
  <input id="file_upload" name="file_upload" type="file" multiple="true" />
  <!--放图片的容器-->
  <p id="img_url">请上传图片</p>
  <!--隐藏图片的输入框,图片成功上传才有数据,这句为了表单提交时候把图片的url提交到后台-->
  <input id="img" name="image" value="" style="display: none;" /><br />
  <input type="submit" name="submit" value="Create news item" />
</form>

js 中注意获取的节点 file_upload 有没有对应上,uploader对应就是你需要发给后端处理的对应文件,由于我这里用的是 CI 框架,所以我这个路径会找到 news 控制器下的 upload_picture 方法,onUploadSuccess 方法就是图片上传成功后的回调,你可以在这里把拼接好的数组添加到对应的表单 input 图片数据的节点,让后面表单提交的时候获取该数组到后台,还有要注意的是 swf 的路径要对应上,还有上传的时候会请求一张 cancel 的图片,这个路径也要对应上

这里发现 uploadify 还会默认请求项目根目录 index 的东西,所以我在 news 控制器下设置 index 默认的方法,不然会一直看到控制台请求不了主页数据的提醒,不过不影响上传图片的功能,其实可以忽略

<script type="text/javascript">
    <?php $timestamp = time();?>
    $(function () {
      var imgArr = [];
      $('#file_upload').uploadify({
          'formData': {
              'timestamp': '<?php echo $timestamp;?>',
              'token': '<?php echo md5('unique_salt'.$timestamp);?>'
          },
          'swf': '<?php echo base_url('assets/lib/uploadify/uploadify.swf');?>',
          'uploader': 'upload_picture',
          'onUploadSuccess': function (file, data, response) {
              imgArr.push("http://localhost/CI/myCi/uploads/" + file.name);
              $('#img').val(imgArr);
              //每次渲染前清空容器,让新的图片重新渲染
              $("#img_url").text("");
              //遍历渲染图片显示
              $.each(imgArr, function (index, data) {
                  $("<img src=" + data + " />").appendTo("#img_url");
              })
          },
          'onUploadError': function (file, errorCode, errorMsg, errorString) {
              alert(errorString);
          }
      });
  });
</script>

后端文件处理的方法,这个参考的就是官网的 uploadify.php 的写法,把它全部放进你对应控制器的方法中即可

//上传图片 使用uploadify插件
public function upload_picture()
{
	//记得更改目录位置,对应服务器的根目录,即htdocs为跟目录文件夹
	$targetFolder = '/CI/myCi//uploads'; // Relative to the root
	$verifyToken = md5('unique_salt' . $_POST['timestamp']);

	if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
		$tempFile = $_FILES['Filedata']['tmp_name'];
		$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
		$targetFile = rtrim($targetPath, '/') . '/' . $_FILES['Filedata']['name'];

		// Validate the file type
		$fileTypes = array('jpg', 'jpeg', 'gif', 'png'); // File extensions
		$fileParts = pathinfo($_FILES['Filedata']['name']);

		if (in_array($fileParts['extension'], $fileTypes)) {
			move_uploaded_file($tempFile, $targetFile);
			echo '1';
		} else {
			echo 'Invalid file type.';
		}
	}
}

记得修改$targetFolder 的值,然后在你想保存图片的地方创建保存图片的文件夹即可

CI列表渲染

关键是用foreach方法来渲染
视图 View:

<!DOCTYPE html>
<html>
  <head>
    <title>hello</title>
  </head>
  <body>
    <ul>
      <?php foreach ($wsscat_list as $item):?>
      <li>
        <?php
        if(is_array($item)){
            echo "我的第一个技能是".$item['first']."我的第二个技能是".$item['second'];
        }
        else{
            echo "我的名字是".$item;
        };?>
      </li>
      <?php endforeach;?>
    </ul>
  </body>
</html>

控制器 Controllers

<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Hello extends CI_Controller
{
    public function index()
    {
        $data['wsscat_list'] = array(
            'name' => 'Wsscat',
            'Autumns',
            array('first' => 'JS', 'second' => 'PHP'),
        );
        $this->load->view('hello', $data);
    }
}

CI富文本编辑器

ckeditor官网
引入js和css文件

<script src="<?php echo base_url('assets/lib/ckeditor/ckeditor.js');?>"></script>
<link rel="stylesheet" href="<?php echo base_url('assets/lib/ckeditor/samples.css');?>">
<link rel="stylesheet" href="<?php echo base_url('assets/lib/ckeditor/neo.css');?>">

在视图显示富文本编辑器的html结构,注意不要把注释写在id为editor的闭合标签里面,不然后面提交的时候会把注释也提交上去,刚开始可以用php显示数据库的html结构

<main>
	<div class="grid-width-100">
		<!--数据库拿出来的html结构渲染到富文本编辑器-->
		<div id="editor">
			<?php echo $news[0]['text'];?>
		</div>
	</div>
</main>
<input type="submit" name="submit" onclick="submitNewsDetail()" value="提交修改" />

当我们富文本经过初始化后,我们就可以尝试来获取富文本编辑器编写的html结构

//富文本编辑器初始化,来自ck demo
if(CKEDITOR.env.ie && CKEDITOR.env.version < 9)
	CKEDITOR.tools.enableHtml5Elements(document);

CKEDITOR.config.height = 150;
CKEDITOR.config.width = 'auto';

var initSample = (function() {
	var wysiwygareaAvailable = isWysiwygareaAvailable(),
		isBBCodeBuiltIn = !!CKEDITOR.plugins.get('bbcode');

	return function() {
		var editorElement = CKEDITOR.document.getById('editor');

		// :(((
		if(isBBCodeBuiltIn) {
			editorElement.setHtml('<h1>Hello world1!</h1><p>I&#39;m an instance of <a href="http://ckeditor.com">CKEditor</a>.');
		}

		// Depending on the wysiwygare plugin availability initialize classic or inline editor.
		if(wysiwygareaAvailable) {
			CKEDITOR.replace('editor');
		} else {
			editorElement.setAttribute('contenteditable', 'true');
			CKEDITOR.inline('editor');

			// TODO we can consider displaying some info box that
			// without wysiwygarea the classic editor may not work.
		}
	};

	function isWysiwygareaAvailable() {
		// If in development mode, then the wysiwygarea must be available.
		// Split REV into two strings so builder does not replace it :D.
		if(CKEDITOR.revision == ('%RE' + 'V%')) {
			return true;
		}

		return !!CKEDITOR.plugins.get('wysiwygarea');
	}
})();
initSample();

获取html内容,然后可以通过表单提交或者ajax把html结构存进数据库
这里举例用ajax提交富文本数据

  • 1、获取CKEditor被选中的内容
var mySelection = CKEDITOR.instances.ckStem.getSelection();
  • 2、获取CKEditor纯文本
var stemTxt=CKEDITOR.instances.CKEditor1.document.getBody().getText(); //取得纯文本  
  • 3、获取CKEditor带HTML标签的文本
var stem = CKEDITOR.instances.CKEditor1.getData();

我这里使用了CKEDITOR.instances.editor.getData()来获取富文本html内容

//用ajax提交ck编辑信息
function submitNewsDetail() {
	console.log($("[name='title']").val());
	$.ajax({
		type: "POST",
		url: "<?php echo site_url('news/edit_by_ck?id='.$id);?>",
		data: {
			title: $("[name='title']").val(),
			//获取富文本的html内容
			text: CKEDITOR.instances.editor.getData(),
			channel: $("[name='channel']").val(),
		},
		async: true,
		success: function(data) {
			console.log("已经成功提交");
			console.log(JSON.parse(data));
			//成功后返回新闻列表详细页面
			window.location.href = "<?php echo site_url('news/show');?>"
		}
	});
}

PHP数据库操作

mysql_connect

连接到一个 MySQL 数据库
在您能够访问并处理数据库中的数据之前,您必须创建到达数据库的连接

名字 参数
servername 可选。规定要连接的服务器。默认是 "localhost:3306"
username 可选。规定登录所使用的用户名。默认值是拥有服务器进程的用户的名称
password 可选。规定登录所用的密码。默认是 ""
//记得端口别写错
$con = mysql_connect("localhost:3306","wscats","123456789");
if (!$con) {
  die('Could not connect: ' . mysql_error());
}

mysql_select_db

mysql_select_db("ws", $con);
//SQL语句对大小写不敏感,所以SELECT与select等效
$result = mysql_query("select * from news");

mysql_fetch_array

mysql_fetch_array(data,array_type)从结果集中取得一行作为关联数组,或数字数组,或二者兼有
注意第二个参数是常量,不是字符串

名字 参数
MYSQL_ASSOC 关联数组
MYSQL_NUM 数字数组
MYSQL_BOTH 默认。同时产生关联和数字数组
$data = array();
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  //array_pop() 删除数组的最后一个元素(出栈)
  //array_push() 将一个或多个元素插入数组的末尾(入栈)
  array_push($data ,$row);
}

$apiData = array("news"=>$data);
//输出jsonp数据 {"news":[{"title":"qqqqaaa","text":"sssqweqweaaa","id":"29","source":"qqqqqwe"},{"title":"asdsasd","text":"asdasd","id":"31","source":"asdasd"},{"title":"123213qwewe","text":"123123qweqwe","id":"32","source":"12323qeqe"},{"title":"qweqwe","text":"qweqwe","id":"33","source":"qwqwe"}]}
echo json_encode($apiData);

mysql_fetch_assoc

mysql_fetch_assoc从结果集中取得一行作为关联数组

//例如Array ( [title] => qqqqaaa [text] => sssqweqweaaa [id] => 29 [source] => qqqqqwe )
$result2 = mysql_query("select * from news where id = 29");
print_r(mysql_fetch_assoc($result2));

mysql_fetch_row

mysql_fetch_row()函数从结果集中取得一行作为数字数组

//例如Array ( [0] => qqqqaaa [1] => sssqweqweaaa [2] => 29 [3] => qqqqqwe )
$result3 = mysql_query("select * from news where id = 29");
print_r(mysql_fetch_row($result3));

mysql_fetch_object

mysql_fetch_object()函数从结果集(记录集)中取得一行作为对象

$result4 = mysql_query("select * from news");
while ($row = mysql_fetch_object($result4)) {
  echo $row->title."<br />";
}

mysql_close

关闭连接,脚本一结束,就会关闭连接

mysql_close($con);

源码

<?php
//记得端口别写错
$con = mysql_connect("localhost:3306","wscats","123456789");
if (!$con) {
  die('Could not connect: ' . mysql_error());
}
mysql_select_db("ws", $con);
$result = mysql_query("select * from news");

//1.mysql_fetch_array(data,array_type) 从结果集中取得一行作为关联数组,或数字数组,或二者兼有
//注意第二个参数是常量,不是字符串
/*MYSQL_ASSOC - 关联数组
MYSQL_NUM - 数字数组
MYSQL_BOTH - 默认。同时产生关联和数字数组*/
$data = array();
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  //var_dump($row);
  //echo '<br />';
  //array_pop() 删除数组的最后一个元素(出栈)
  //array_push() 将一个或多个元素插入数组的末尾(入栈)
  array_push($data ,$row);
}

$apiData = array("news"=>$data);
//输出jsonp数据 {"news":[{"title":"qqqqaaa","text":"sssqweqweaaa","id":"29","source":"qqqqqwe"},{"title":"asdsasd","text":"asdasd","id":"31","source":"asdasd"},{"title":"123213qwewe","text":"123123qweqwe","id":"32","source":"12323qeqe"},{"title":"qweqwe","text":"qweqwe","id":"33","source":"qwqwe"}]}
echo json_encode($apiData);



//2.mysql_fetch_assoc 从结果集中取得一行作为关联数组
//例如Array ( [title] => qqqqaaa [text] => sssqweqweaaa [id] => 29 [source] => qqqqqwe )
$result2 = mysql_query("select * from news where id = 29");
print_r(mysql_fetch_assoc($result2));



//3.mysql_fetch_row() 函数从结果集中取得一行作为数字数组
//例如Array ( [0] => qqqqaaa [1] => sssqweqweaaa [2] => 29 [3] => qqqqqwe )
$result3 = mysql_query("select * from news where id = 29");
print_r(mysql_fetch_row($result3));



//4.mysql_fetch_object() 函数从结果集(记录集)中取得一行作为对象。
$result4 = mysql_query("select * from news");
while ($row = mysql_fetch_object($result4)) {
  echo $row->title."<br />";
}
mysql_close($con);
?>

CI页面跳转问题

官方文档的URL辅助函数
使用的时候先引入url辅助函数

$this->load->helper('url');

然后可以在对应的控制器和视图上拼接新的url

<a href="<?php echo site_url('form_delete');?>">删除</a>

默认在没有设置config的config.php的$config['base_url']前,跳转的域名是会显示
image
::1其实是ipv6本地环回地址简写,但如果觉得不好看,可以在config.php重新设置$config['base_url'],例如下面这样

$config['base_url'] = 'http://localhost/CI/myCi/';

CI登陆注册

CI框架设置全局登录限制

<?php
/*在CI框架的项目开发过程中,需要对用户登录状态进行验证和跳转,如果每个页面或者每个控制器都写相同的代码,就非常浪费开发效率,并且代码臃肿,相当的麻烦。
下面介绍一种方法,既然可以有全局控制器,那么就在全局控制器中添加登录态的判断,其他继承自该控制器的每个控制器中,自定义是否需要登录状态的判断。具体实现代码如下!
首先打开CI框架根目录->system->core->Controller.php,添加代码(根据注释添加):
*/
public $need_login = false;//添加登录状态属性
/**
* Constructor
*/
public function __construct(){
	self::$instance =& $this;
	// Assign all the class objects that were instantiated by the
	// bootstrap file (CodeIgniter.php) to local class variables
	// so that CI can run as one big super object.
	foreach (is_loaded() as $var => $class){
		$this->$var =& load_class($class);
	}
	
	$this->load =& load_class('Loader', 'core');
	$this->load->library('session');//开启session
	$this->load->initialize();
	$this->check_login();//调用判断登录的方法
	log_message('debug', "Controller Class Initialized");
}
private function check_login(){//判断登录的方法
	if($this->need_login){
	$session_data = $this->session->userdata('user');
		if(!$session_data){
			$url = "/phpthinking";
			echo "<script language='javascript' type='text/javascript'>";
			echo "window.location.href='$url'";
			echo "</script>";
			exit;
		}
	}
}
//在其他子控制器中,只要添加如下代码就可实现功能:
public function __construct(){
	$this->need_login = true;//控制是否需要登录
	parent::__construct();
}
;?>

PHP封装操作Mysql类

配置参数

<?php  
    define('DB_HOST', 'localhost:3306');  
    define('DB_USER', 'wscats');  
    define('DB_PWD', '123456789');  
    define('DB_CHARSET', 'UTF8');  
    define('DB_DBNAME', 'asm');  
?>  

操作数据库方法

<?php  
class mysql{  
    /** 
     * 连接MYSQL函数 
     * 连接MYSQL函数,通过常量的形式来连接数据库 
     * 自定义配置文件,配置文件中自定义常量,包含需要使用的信息 
     * @return resource 
     */  
    function connect2 (){   
        //连接mysql  
        $link=@mysql_connect(DB_HOST,DB_USER,DB_PWD) or die ('数据库连接失败<br/>ERROR '.mysql_errno().':'.mysql_error());  
        //设置字符集  
        mysql_set_charset(DB_CHARSET);  
        //打开指定的数据库  
        mysql_select_db(DB_DBNAME) or die('指定的数据库打开失败');  
        return $link;  
    }  
      
      
      
    /* array( 
    'username'=>'cy', 
    'password'=>'123456', 
    'email'=>'[email protected]' 
    ) */  
      
    /** 
     * 插入记录的操作 
     * @param array $array 
     * @param string $table 
     * @return boolean 
     */  
    function insert($array,$table){  
        $keys=join(',',array_keys($array));  
        $values="'".join("','", array_values($array))."'";  
        $sql="insert {$table}({$keys}) VALUES ({$values})";  
        $res=mysql_query($sql);  
        if($res){  
            return mysql_insert_id();  
        }else{  
            return false;  
        }  
    }  
      
      
    /** 
     * MYSQL更新操作 
     * @param array $array 
     * @param string $table 
     * @param string $where 
     * @return number|boolean 
     */  
    function update($array,$table,$where=null){  
        foreach ($array as $key=>$val){  
            $sets.=$key."='".$val."',";  
        }  
        $sets=rtrim($sets,','); //去掉SQL里的最后一个逗号  
        $where=$where==null?'':' WHERE '.$where;  
        $sql="UPDATE {$table} SET {$sets} {$where}";  
        $res=mysql_query($sql);  
        if ($res){  
            return mysql_affected_rows();  
        }else {  
            return false;  
        }  
    }  
      
      
    /** 
     * 删除记录的操作 
     * @param string $table 
     * @param string $where 
     * @return number|boolean 
     */  
    function delete($table,$where=null){  
        $where=$where==null?'':' WHERE '.$where;  
        $sql="DELETE FROM {$table}{$where}";  
        $res=mysql_query($sql);  
        if ($res){  
            return mysql_affected_rows();  
        }else {  
            return false;  
        }  
    }  
      
      
      
    /** 
     * 查询一条记录 
     * @param string $sql 
     * @param string $result_type 
     * @return boolean 
     */  
    function fetchOne($sql,$result_type=MYSQL_ASSOC){  
        $result=mysql_query($sql);  
        if ($result && mysql_num_rows($result)>0){  
            return mysql_fetch_array($result,$result_type);  
        }else {  
            return false;  
        }  
    }  
      
      
      
      
      
    /** 
     * 得到表中的所有记录 
     * @param string $sql 
     * @param string $result_type 
     * @return boolean 
     */  
    function fetchAll($sql,$result_type=MYSQL_ASSOC){  
        $result=mysql_query($sql);  
        if ($result && mysql_num_rows($result)>0){  
            while ($row=mysql_fetch_array($result,$result_type)){  
                $rows[]=$row;  
            }  
            return $rows;  
        }else {  
            return false;  
        }  
    }  
      
      
    /**取得结果集中的记录的条数 
     * @param string $sql 
     * @return number|boolean 
     */  
    function getTotalRows($sql){  
        $result=mysql_query($sql);  
        if($result){  
            return mysql_num_rows($result);  
        }else {  
            return false;  
        }  
          
    }  
      
    /**释放结果集 
     * @param resource $result 
     * @return boolean 
     */  
    function  freeResult($result){  
        return  mysql_free_result($result);  
    }  
      
      
      
    /**断开MYSQL 
     * @param resource $link 
     * @return boolean 
     */  
    function close($link=null){  
        return mysql_close($link);  
    }  
      
      
    /**得到客户端的信息 
     * @return string 
     */  
    function getClintInfo(){  
        return mysql_get_client_info();  
    }  
      
      
    /**得到MYSQL服务器端的信息 
     * @return string 
     */  
    function getServerInfo($link=null){  
        return mysql_get_server_info($link);  
    }  
      
      
      
    /**得到主机的信息 
     * @return string 
     */  
    function getHostInfo($link=null){  
        return mysql_get_host_info($link);  
    }  
      
    /**得到协议信息 
     * @return string 
    */  
    function getProtoInfo($link=null){  
        return mysql_get_proto_info($link);  
    }  
}  
?>  

示例

<?php  
    require_once 'function.php';
    require_once 'config.php';
    $db = new mysql();  
    $link = $db->connect2();  
    //var_dump($link);
    $sql='SELECT * FROM news';  
    $rows = $db->fetchAll($sql);  
    //var_dump($rows); 
    echo json_encode($rows);
?>  

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.