PHP连接数据库有许多方法:
1、mysqli(面向过程)
$conn = mysqli_connect("localhost","账号","密码") or die("数据库连接失败!失败信息:".mysqli_connect_error($conn));
mysqli_select_db($conn, "数据库名") or die("数据库选择失败!");
mysqli_set_charset($conn,"utf8") or die("数据库编码集设置失败!");
$sql="sql语句";
$res = mysqli_query($conn,$sql);
$this::$returnGetDeviceCID=new ArrayList();
while($row = mysqli_fetch_array($res))
{
//处理数据
}
mysqli_close($conn);
2、mysqli(面向对象)
/** * 处理数据库的扩展库
* * mysqli的预处理语句
* mysqli_stmt预处理类(推荐使用的类)
* 优点:(mysqli和mysqli_result类的相比)
* 1.性能:mysqli_stmt高(执行多条类型相同不同数据的sql,不用多次编译sql)
* 2.安全上:sql注入问题(用?占位符来解决)
* 使用(详情见代码):
* ?占位符绑定:(邦定时要注意,后写的信息要与定好的类型匹配否则无法执行)
* 例子:$stmt->bind_param("isd",$id,$name,$price);
* i:整型
* d:double
* s:string
* b:二进制数
* 返回mysqli_stmt预处理类对象:$stmt = $mysqli->prepare($insert)
* 一次性将结果全取出来:store_result()
* */
$mysqli = new mysqli("localhost","用户名","密码","数据库名");
if (mysqli_connect_errno()) {
echo "连接失败:" . mysqli_connect_error();
$mysqli = null; exit();
}
$mysqli->set_charset('utf8');
$mysqli->autocommit(true);
$sql = "SELECT pushId,CID,deviceToken FROM device_cid WHERE UID=? AND deviceStatus=1 AND pushStatus=1;";
//1.返回mysqli_stmt预处理类对象 $stmt = $mysqli->stmt_init();
//准备一条语句放在服务器上 $stmt->prepare($sql);
//2.mysqli的方式(简化了操作)
//$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $UID);
//绑定之后开始执行了
if ($stmt->execute()) {
$this::$returnGetDeviceCID = new ArrayList();
$stmt->store_result();
echo "记录个数:".$stmt->num_rows."行";
$stmt->bind_result($pushId,$CID,$deviceToke);
while ($stmt->fetch()){
echo "pushId-->".$pushId." CID-->".$CID." deviceToke-->".$deviceToke;
$this::$deviceCID = new DeviceCID('', '', $pushId, $CID, $deviceToke,'', '');
$this::$returnGetDeviceCID->Add($this::$deviceCID);
}
} else {
echo "执行失败";
}
$stmt->free_result();
$stmt->close();
$mysqli->close();
3、PDO
// TODO: Implement getDeviceCID() method.
$dbms = 'mysql'; //数据库类型
$host = 'localhost'; //数据库主机名
$dbName = '数据库名'; //使用的数据库
$user = '用户名'; //数据库连接用户名
$password = '密码'; //对应的密码
$dsn = "$dbms:host=$host;
dbname=$dbName";
try {
$dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_PERSISTENT => true)); //初始化一个PDO对象,且是长连接。
$dbh->query("set names utf8"); //设置数据库编码为utf8
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//设置数据库句柄属性:(错误报告,抛出 exceptions 异常)。 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);//设置数据库句柄属性:启用或禁用预处理语句的模拟。强制PDO总是模拟预处理语句(如果为 TRUE ),或试着使用本地预处理语句(如果为 FALSE)。
$stmt = $dbh->prepare("SELECT pushId,CID,deviceToken FROM device_id WHERE UID=:UID AND deviceStatus=1 AND pushStatus=1;"); $stmt->bindParam(':UID', $UID);
if ($stmt->execute()) {
$stmt->setFetchMode(PDO::FETCH_ASSOC);//设置所有的获取模式,全部是关联数组,也可以写在fetch里面(PDO::FETCH_ASSOC),不写就是默认的类型关联和索引都返回
$this::$returnGetDeviceCID=new ArrayList();
while ($row = $stmt->fetch()) {
//获取所有查出来的值 循环
$this::$deviceCID = new DeviceCID('', '', $row["pushId"], $row["CID"], $row["deviceToken"], '', '');
$this::$returnGetDeviceCID->Add($this::$deviceCID);
}
}
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "");
}
return $this::$returnGetDeviceCID;
网友评论