• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

帮我看看,这段数据库连接代码有没有什么问题?

php 搞代码 4年前 (2022-01-23) 23次浏览 已收录 0个评论
文章目录[隐藏]

新手学php,书上一直没有好的例子,网上的也有错误,自己照着php手册写了一个完整点的
高手帮我看一下,有没有哪里写错了…谢谢了

<code>//面向对象$mysqli = new mysqli("localhost", "user", "pass", "database");  if(mysqli_connect_errno())) {  //这边判断方式和下面面向过程中的直接判断变量有什么区别?    printf("Connect failed: %s\n",  mysqli_connect_error());    exit();}$query =  "SELECT `name`, `address`, `phone` FROM Users WHERE gender=? AND age=?";if($stmt = $mysqli->prepare($query) {    $stmt->bind_param("si", $gender, $age);  //这边插入参数是不是写在这里?    $stmt->execute();    $stmt->bind_result($name, $address, $phone);         while($stmt->fetch()) {         printf ("%s (%s,%s)<br />", $name, $address, $phone);     }    $stmt->close();}$mysqli->close(); /面向过程$mysqli = mysqli_connecti("localhost", "user", "pass", "database");if(!$mysqli) {    printf ("Connect failed: %s\n",  mysqli_connect_error());    exit();}$query =  "SELECT `name`, `address`, `phone` FROM Users WHERE gender=? AND age=?";if ($stmt = mysqli_prepare($query)){    mysqli_stmt_bind_param($stmt, "si", $gender, $age);    mysqli_stmt_execute($stmt);    mysqli_stmt_bind_result($stmt, $name, $address, $phone);         while (mysqli_stmt_fetch($stmt)) {        printf ("%s (%s,%s)<br />", $name, $address, $phone);     }    mysqli_stmt_close($stmt);}$mysq<i style="color:transparent">本#文来源gaodai$ma#com搞$$代**码网$</i><button>搞代gaodaima码</button>li_close();</code>

回复内容:

新手学php,书上一直没有好的例子,网上的也有错误,自己照着php手册写了一个完整点的
高手帮我看一下,有没有哪里写错了…谢谢了

<code>//面向对象$mysqli = new mysqli("localhost", "user", "pass", "database");  if(mysqli_connect_errno())) {  //这边判断方式和下面面向过程中的直接判断变量有什么区别?    printf("Connect failed: %s\n",  mysqli_connect_error());    exit();}$query =  "SELECT `name`, `address`, `phone` FROM Users WHERE gender=? AND age=?";if($stmt = $mysqli->prepare($query) {    $stmt->bind_param("si", $gender, $age);  //这边插入参数是不是写在这里?    $stmt->execute();    $stmt->bind_result($name, $address, $phone);         while($stmt->fetch()) {         printf ("%s (%s,%s)<br />", $name, $address, $phone);     }    $stmt->close();}$mysqli->close(); /面向过程$mysqli = mysqli_connecti("localhost", "user", "pass", "database");if(!$mysqli) {    printf ("Connect failed: %s\n",  mysqli_connect_error());    exit();}$query =  "SELECT `name`, `address`, `phone` FROM Users WHERE gender=? AND age=?";if ($stmt = mysqli_prepare($query)){    mysqli_stmt_bind_param($stmt, "si", $gender, $age);    mysqli_stmt_execute($stmt);    mysqli_stmt_bind_result($stmt, $name, $address, $phone);         while (mysqli_stmt_fetch($stmt)) {        printf ("%s (%s,%s)<br />", $name, $address, $phone);     }    mysqli_stmt_close($stmt);}$mysqli_close();</code>

代码是写出来跑的,代码写的对不对,得问编译器或者解析器,它们才是真正的老师。

你自己跑一遍呀。。。

这肉眼真不好看,最后一句好像有问题, 得传入参数($mysqli)吧.

prepare+execute后bind_result+循环fetch是传统的做法.
PHP从5.4开始底层默认采用mysqlnd实现mysql,mysqli,pdo_mysql.
这时你可以使用 get_result 和 fetch_all 快速拿到查询结果.
prepare+execute后 $stmt->get_result()->fetch_all(MYSQLI_ASSOC) 即可拿到结果集.
比如:

<code>post.php?id=1024MySQLi普通查询:$db = new mysqli('127.0.0.1','user','pass','dbname',3306);var_export($db->query('SELECT * FROM posts WHERE id='.intval($_GET['id']))->fetch_all());MySQLi预处理绑定参数查询:$db = new mysqli('127.0.0.1','user','pass','dbname',3306);$stmt = $db->prepare('SELECT * FROM posts WHERE id=?'); //预处理$stmt->bind_param('i', $_GET['id']); //绑定参数(可以防止SQL注入)$stmt->execute(); //查询var_export($stmt->get_result()->fetch_all());</code>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:帮我看看,这段数据库连接代码有没有什么问题?
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址