>백엔드 개발 >PHP 튜토리얼 >이 데이터베이스 연결 코드에 문제가 있는지 확인하도록 도와주세요.

이 데이터베이스 연결 코드에 문제가 있는지 확인하도록 도와주세요.

WBOY
WBOY원래의
2016-08-04 09:19:571248검색

초보자는 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>

답글 내용:

초보자는 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 Execution 이후의 Bind_result 루프 가져오기는 전통적인 방법입니다.
5.4부터 PHP는 기본적으로 mysql, mysqli, pdo_mysql을 구현하기 위해 최하위 계층으로 mysqlnd를 사용합니다.
이때 get_result 및 fetch_all을 사용하면 쿼리 결과를 빠르게 얻을 수 있습니다.
준비 실행 후 $stmt->get_result()->fetch_all(MYSQLI_ASSOC) 결과 세트를 얻을 수 있습니다.
예:

<code>post.php?id=1024

MySQLi普通查询:
$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>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.