bind_result와 get_result를 사용하는 방법의 예
using bind_result
vs. 를 호출하는 방법 get_result
과 하나를 다른 것보다 사용하는 목적이 무엇인지에 대한 예를보고 싶습니다 .
또한 각각을 사용하는 장단점.
둘 중 하나를 사용할 때의 한계는 무엇이며 차이점이 있습니다.
저에게 결정적인 요소는 *
.
bind_result()
이것을 사용하는 것이 더 좋습니다.
// Use bind_result() with fetch()
$query1 = 'SELECT id, first_name, last_name, username FROM table WHERE id = ?';
get_result()
이것을 사용하는 것이 더 좋습니다.
// Use get_result() with fetch_assoc()
$query2 = 'SELECT * FROM table WHERE id = ?';
실시 예 1에 대한 $query1
사용bind_result()
$query1 = 'SELECT id, first_name, last_name, username FROM table WHERE id = ?';
$id = 5;
if($stmt = $mysqli->prepare($query)){
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt->bind_param('i',$id);
/* execute query */
$stmt->execute();
/* Store the result (to get properties) */
$stmt->store_result();
/* Get the number of rows */
$num_of_rows = $stmt->num_rows;
/* Bind the result to variables */
$stmt->bind_result($id, $first_name, $last_name, $username);
while ($stmt->fetch()) {
echo 'ID: '.$id.'<br>';
echo 'First Name: '.$first_name.'<br>';
echo 'Last Name: '.$last_name.'<br>';
echo 'Username: '.$username.'<br><br>';
}
/* free results */
$stmt->free_result();
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
예 2 $query2
사용get_result()
$query2 = 'SELECT * FROM table WHERE id = ?';
$id = 5;
if($stmt = $mysqli->prepare($query)){
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt->bind_param('i',$id);
/* execute query */
$stmt->execute();
/* Get the result */
$result = $stmt->get_result();
/* Get the number of rows */
$num_of_rows = $result->num_rows;
while ($row = $result->fetch_assoc()) {
echo 'ID: '.$row['id'].'<br>';
echo 'First Name: '.$row['first_name'].'<br>';
echo 'Last Name: '.$row['last_name'].'<br>';
echo 'Username: '.$row['username'].'<br><br>';
}
/* free results */
$stmt->free_result();
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
당신이 볼 수 있듯이 당신은 사용할 수 없습니다 bind_result
와 함께 *
. 그러나 get_result
둘 다에 대해 작동하지만 bind_result
더 간단하고 $row['name']
.
bind_result ()
장점 :
- 더 간단
- 엉망이 될 필요가 없습니다
$row['name']
- 용도
fetch()
단점 :
- 다음을 사용하는 SQL 쿼리에서는 작동하지 않습니다.
*
get_result ()
장점 :
- 모든 SQL 문에서 작동
- 용도
fetch_assoc()
단점 :
- 배열 변수를 엉망으로 만들어야합니다.
$row[]
- 깔끔하지 않음
- MySQL 기본 드라이버 ( mysqlnd ) 필요
각 매뉴얼 페이지에서 예제를 찾을 수 있습니다.
장점과 단점은 매우 간단합니다.
- get_result는 결과를 처리하는 유일한 방법입니다.
- 그러나 항상 사용할 수있는 것은 아니며 코드는 ugly bind_result를 사용하여 대체해야합니다.
어쨌든, 당신의 아이디어가 응용 프로그램 코드에서 두 기능 중 하나를 바로 사용하는 것이라면 이것은 잘못된 생각입니다. 그러나 쿼리에서 데이터를 반환하기 위해 일부 메서드에 캡슐화되어있는 한 bind_result를 구현하려면 10 배 더 많은 코드가 필요하다는 사실을 제외하고 어떤 것을 사용할 것인지는 중요하지 않습니다.
Main difference I've noticed is that bind_result()
gives you error 2014
, when you try to code nested $stmt inside other $stmt, that is being fetched (without mysqli::store_result()
):
Prepare failed: (2014) Commands out of sync; you can't run this command now
Example:
Function used in main code.
function GetUserName($id) { global $conn; $sql = "SELECT name FROM users WHERE id = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param('i', $id); $stmt->execute(); $stmt->bind_result($name); while ($stmt->fetch()) { return $name; } $stmt->close(); } else { echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; } }
Main code.
$sql = "SELECT from_id, to_id, content FROM `direct_message` WHERE `to_id` = ?"; if ($stmt = $conn->prepare($sql)) { $stmt->bind_param('i', $myID); /* execute statement */ $stmt->execute(); /* bind result variables */ $stmt->bind_result($from, $to, $text); /* fetch values */ while ($stmt->fetch()) { echo "<li>"; echo "<p>Message from: ".GetUserName($from)."</p>"; echo "<p>Message content: ".$text."</p>"; echo "</li>"; } /* close statement */ $stmt->close(); } else { echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; }
I think example 2 will only work like this, because store_result and get_result both get the info from the table.
So remove
/* Store the result (to get properties) */
$stmt->store_result();
And change the order a bit. This is the end result:
$query2 = 'SELECT * FROM table WHERE id = ?';
$id = 5;
if($stmt = $mysqli->prepare($query)){
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt->bind_param('i',$id);
/* execute query */
$stmt->execute();
/* Get the result */
$result = $stmt->get_result();
/* Get the number of rows */
$num_of_rows = $result->num_rows;
while ($row = $result->fetch_assoc()) {
echo 'ID: '.$row['id'].'<br>';
echo 'First Name: '.$row['first_name'].'<br>';
echo 'Last Name: '.$row['last_name'].'<br>';
echo 'Username: '.$row['username'].'<br><br>';
}
/* free results */
$stmt->free_result();
get_result() is now only available in PHP by installing the MySQL native driver (mysqlnd). In some environments, it may not be possible or desirable to install mysqlnd.
Notwithstanding, you can still use mysqli to do 'select *' queries, and get the results with the field names - although it is slightly more complicated than using get_result(), and involves using php's call_user_func_array() function. See example at How to use bind_result() instead of get_result() in php which does a simple 'select *' query, and outputs the results (with the column names) to an HTML table.
참고URL : https://stackoverflow.com/questions/18753262/example-of-how-to-use-bind-result-vs-get-result
'developer tip' 카테고리의 다른 글
Java의 모든 열거 형 값으로 목록 채우기 (0) | 2020.10.23 |
---|---|
ng-show 및 ng-animate로 슬라이드 업 / 다운 효과 (0) | 2020.10.23 |
Swift에서 CGFloat 반올림 (0) | 2020.10.23 |
`source ( 'myfile.r')`과 같은 R Markdown 파일을 소싱하는 방법은 무엇입니까? (0) | 2020.10.22 |
불법 반사 접근이란 무엇입니까 (0) | 2020.10.22 |