Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:如果使用独立的绑定指令, bindparams, bindValue并不相同, 一个是引用绑定, 一个是值绑定, 一个用在多次执行环境 , 一个不行, 具体区别可查询手册
<?php
namespace php_db;
//数据库配置文件
return
[
//默认数据库类型
'type' => $type ?? 'mysql',
//默认主机名或IP
'host' => $host ?? 'www.my.com',
//默认字符集
'charset' => $charset ?? 'uft8',
//默认数据库名
'dbname' => $dbname ?? 'php_school',
//默认端口号
'port' => $port ?? '3306',
//默认数据库用户名
'dbuser' => $dbuser ?? 'root',
//默认数据库密码
'dbpassword' => $dbpassword ?? 'root'
];
<?php
/*
此文件是连接数据库文件;
*/
//定议命名空间,php_db;
namespace php_db;
//引入异常处理类Exception;
use Exception;
//引入pdo命名空间;
use pdo;
//引入数据库参数文件;
$config = require 'config/db.php';
ini_set('display_errors', 1);
error_reporting(E_ALL);
//展开数组,以key为变量并赋值
extract($config);
//建立DSN串;
$dsn = sprintf("%s:host=%s;dbname=%s;characterset=%s", $type, $host, $dbname, $charset);
try {
$pdo = new pdo($dsn, $dbuser, $dbpassword);
} catch (Exception $e) {
die('error:' . $e->getMessage() . '</br>');
}
<?php
/*实现查询功能;*/
//定议查询命名空间;
namespace php_select;
//引入连接文件;
require 'connect.php';
//引入数据库命名空间;
use php_db;
//引入PDO命名空间;
use PDO;
//建立查询语句;
$columname = "`id_student`,`name_student`,`sex_student`,`grade_student`,`class_student`,`duty_student` ";
$tablename = 'student';
$condition = "duty_student = '学生' LIMIT 5";
$sql = 'SELECT ' . $columname . ' From ' . $tablename . ' WHERE ' . $condition;
// $sql = 'SELECT :columname
// From `student`
// WHERE `duty_student` = "学生"
// LIMIT 5';
//预处理SQL语名,并赋给一个对象$stement;
/*
@var param $stement
*/
// $columname = "`id_student`,`name_student`,`sex_student`,`grade_student`,`class_student`,`duty_student` ";
// $columname = "id_student";
$stement = NULL;
$stement = $pdo->prepare($sql);
// $stement->bindParam('columname', $columname, PDO::PARAM_STR);
// echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:', $columname, '<hr>';
//执行查询语句;
$stement->execute();
// var_dump($stemnet);
// die();
while ($student = $stement->fetch(PDO::FETCH_ASSOC)) {
// var_dump($student);
$student['sex_student'] ? $student['sex_student'] = '男' : $student['sex_student'] = '女';
// echo $student['sex_student'];
// var_dump($student);
vprintf("学号:%s,姓名:%s,性别:%s,%s年级%s班,职务:%s<br>", $student);
}
//关闭数据库连接,释放对象;
unset($pdo, $stemnet, $student);
实例结果:
<?php
/*实现查询功能;*/
//定议查询命名空间;
namespace php_select;
//引入连接文件;
require 'connect.php';
//引入数据库命名空间;
use php_db;
//引入PDO命名空间;
use PDO;
//建立查询语句;
$columname = "`id_student`,`name_student`,`sex_student`,`grade_student`,`class_student`,`duty_student` ";
$tablename = 'student';
$condition = "duty_student = '学生' LIMIT 10";
$sql = 'SELECT ' . $columname . ' From ' . $tablename . ' WHERE ' . $condition;
//预处理SQL语名,并赋给一个对象$stement;
/*
@var param $stement
*/
$stement = $pdo->prepare($sql);
// $stement->bindParam('columname', $columname, PDO::PARAM_STR);
// echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:', $columname, '<hr>';
//执行查询语句;
$stement->execute();
// var_dump($stemnet);
// die();
$students = $stement->fetchall(PDO::FETCH_ASSOC);
// echo print_r($students, true);
foreach ($students as $key => $student) {
// var_dump($student);
$student['sex_student'] ? $student['sex_student'] = '男' : $student['sex_student'] = '女';
vprintf("学号:%s , 姓名:%s , 性别:%s , %s年级%s班 , 职务:%s<br>", $student);
}
//关闭数据库连接,释放对象;
unset($pdo, $stemnet, $student);
实例结果:
<?php
/*实现插入功能;*/
//定议查询命名空间;
namespace php_insert;
//引入连接文件;
require 'connect.php';
//引入数据库命名空间;
use Exception;
use php_db;
//引入PDO命名空间;
use PDO;
//建立查询语句;
$data = NULL; //初始化变理;
//拼装列名及值;
$columvalues = ['id_student' => '129', 'name_student' => '周一一', 'sex_student' => '0', 'grade_student' => '2', 'class_student' => '1', 'duty_student' => '学生'];
foreach ($columvalues as $key => $value)
$data .= '`' . $key . '`' . ' = ' . '\'' . (string) $value . '\'' . ',';
//去除最的,
$data = substr($data, 0, -1);
// 表名
$tablename = 'student';
// $condition = "duty_student = '学生' LIMIT 10";//条件限制;
// 拼装SQL语句;
$sql = 'INSERT ' . $tablename . ' SET ' . $data;
// $sql = 'SELECT :columname
// From `student`
// WHERE `duty_student` = "学生"
// LIMIT 5';
//预处理SQL语名,并赋给一个对象$stement;
/*
@var param $stement
*/
$stement = $pdo->prepare($sql);
// echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:', extract($columvalues), '<hr>';
//执行查询语句;
$stement->execute();
//异常处理
if ($stement->rowcount() === 1)
echo '插入数据成功', '学号:', $pdo->lastInsertId();
else {
echo '插入数据不成功';
}
//关闭数据库连接,释放对象;
unset($pdo, $stemnet, $student);
实例结果:
<?php
/*采用pdo实现修改功能;*/
//定议查询命名空间;
namespace php_update;
//引入连接文件;
require 'connect.php';
//引入数据库命名空间;
use Exception;
use php_db;
//引入PDO命名空间;
use PDO;
//建立修改语句;
$data = null; //初始化变理;
//拼装列名及值;
$columvalues = ['id_student' => '198', 'name_student' => '周一一', 'sex_student' => '0', 'grade_student' => '2', 'class_student' => '1', 'duty_student' => '学生'];
foreach ($columvalues as $key => $value)
$data .= '`' . $key . '`' . ' = ' . '\'' . (string) $value . '\'' . ',';
//去除最后的,
$data = substr($data, 0, -1);
// 表名
$tablename = 'student';
//条件限制;
$condition = "id = '139'";
// 拼装SQL语句;
$sql = 'UPDATE ' . $tablename . ' SET ' . $data . ' WHERE ' . $condition;
//预处理SQL语名,并赋给一个对象$stement;
/*
@var param $stement
*/
$stement = $pdo->prepare($sql);
// echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:', extract($columvalues), '<hr>';
// die();
//执行修改语句;
$stement->execute();
if ($stement->rowcount() === 1)
echo '修改数据成功';
else {
echo '修改数据不成功';
}
//关闭数据库连接,释放对象;
unset($pdo, $stemnet, $student);
实例结果:
<?php
/*采用pdo实现删除功能;*/
//定议查询命名空间;
namespace php_delete;
//引入连接文件;
require 'connect.php';
//引入数据库命名空间;
use Exception;
use php_db;
//引入PDO命名空间;
use PDO;
//建立修改语句;
// $data = null; //初始化变理;
//拼装列名及值;
// $columvalues = ['name_student' => '周一一', 'sex_student' => '0', 'grade_student' => '2', 'class_student' => '1', 'duty_student' => '学生'];
// foreach ($columvalues as $key => $value)
// $data .= '`' . $key . '`' . ' = ' . '\'' . (string) $value . '\'' . ',';
// //去除最的,
// $data = substr($data, 0, -1);
$tablename = 'student'; //表名;
$condition = "id = '129'"; //条件;
//SQL语句拼装
$sql = 'DELETE FROM ' . $tablename . ' WHERE ' . $condition;
//预处理SQL语名,并赋给一个对象$stement;
/*
@var param $stement
*/
$stement = $pdo->prepare($sql);
// echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:';
//执行修改语句;
$stement->execute();
//异常处理;
if ($stement->rowcount() === 1)
echo '删除数据成功';
else {
echo '删除数据不成功';
}
//关闭数据库连接,释放对象;
unset($pdo, $stemnet, $student);
实例结果:
数据库操作步骤
再使用 bindParam()时,只能绑定参数值,不能绑定整个字段变量。
例如:SELECT 列名 FROM 表名 WHERE 条件,不能整体替换中文部分。
使用 PHP 字符串操作,然后组合成代替整体 SQL 语句再做预处理。