첫 번째 if 문을 PDO 문으로 변경해야 하는데, 어떻게 해야할지 모르겠습니다. 누군가 도와주실 수 있나요?
사용자가 양식을 제출할 때 가입 시 할당된 $id 번호를 사용하여 데이터베이스의 사용자 테이블에서 웹사이트의 이 페이지로 이메일 주소를 가져오길 원합니다. .
연결하기
먼저 mysqli 연결을 PDO 연결로 교체해야 합니다(또는 최소한 PDO 연결을 옆에 추가해야 합니다). mysqli!).
// Define database connection parameters $db_host = "127.0.0.1"; $db_name = "name_of_database"; $db_user = "user_name"; $db_pass = "user_password"; // Create a connection to the MySQL database using PDO $pdo = new pdo( "mysql:host={$db_host};dbname={$db_name}", $db_user, $db_pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => FALSE ] );
코드 업데이트
mysqli 및 PDO를 사용하여 준비된 명령문
거의 변수 데이터를 SQL 쿼리에 넣을 때 준비된 문을 사용하는 것이 항상 더 좋습니다. (데이터가 사용자 생성 입력에서 오는 경우) 더 안전할 뿐만 아니라 읽기도 더 쉽고, 다른 값으로 여러 번 실행하기도 더 쉽습니다.
mysqli를 사용하여 준비된 쿼리 :
$sql = "SELECT column1, column2 FROM table WHERE column3 = ? AND column4 = ?"; $query = $mysqli->prepare($sql); $query->bind_param("si", $string_condition, $int_condition); $query->execute(); $query->store_result(); $query->bind_result($column1, $column2); $query->fetch(); echo "Column1: {$column1}<br>"; echo "Column2: {$column2}";
PDO를 사용하여 준비된 쿼리:
$sql = "SELECT column1, column2 FROM table WHERE column3 = ? AND column4 = ?"; $query = $pdo->prepare($sql); $query->execute([$string_condition, $int_condition]); $row = $query->fetchObject(); # $row = $query->fetch(); // Alternative to get indexed and/or associative array echo "Column1: {$row->column1}<br>"; echo "Column2: {$row->column2}";
업데이트된 코드
// Using the NULL coalescing operator here is shorter than a ternary $id = $_SESSION['u_id'] ?? NULL; if($id) { $sql = "SELECT email FROM users WHERE u_id = ?"; $query = $pdo->prepare($sql); // Prepare the query $query->execute([$id]); // Bind the parameter and execute the query $email = $query->fetchColumn(); // Return the value from the database } // Putting "$email" on a line by itself does nothing for your code. The only // thing it does is generate a "Notice" if it hasn't been defined earlier in // the code. Best use: // - The ternary operator: $email = (isset($email)) ? $email : ""; // - The NULL coalescing operator: $email = $email ?? ""; // - OR initialize it earlier in code, before the first `if`, like: $email = ""; // N.B. Instead of "" you could use NULL or FALSE as well. Basically in this case // anything that equates to BOOL(FALSE); so we can use them in `if` statements // so the following (2 commented lines and 1 uncommented) are effectively // interchangeable. $email = $email ?? ""; # $email = $email ?? FALSE; # $email = $email ?? NULL; // Presumably you will also want to change this function to PDO and prepared statements? // Although it doesn't actually do anything in the code provided? $suggestions = selectAll($table); // Same as with email, we're just going to use the NULL coalescing operator. // Note: in this case you had used the third option from above - I've just // changed it so there is less bloat. $optionOne = $_POST['optionOne'] ?? ""; $optionTwo = $_POST['optionTwo'] ?? ""; $newSuggestion = $_POST['new-suggestion'] ?? ""; // There's no point nesting `if` statements like this when there doesn't appear to be any // additional code executed based on the out come of each statement? Just put it into one. // We now don't need to use empty etc. because an empty, false, or null string all. // equate to FALSE. if($newSuggestion && $id && $email && $optionOne && $optionTwo) { // Not sure why you've made the the table name a variable UNLESS you have multiple tables // with exactly the same columns etc. and need to place in different ones at different // times. Which seems unlikely so I've just put the table name inline. $sql = "INSERT INTO suggestions (user_id, email, option_1, option_2) VALUES (?, ?, ?, ?)"; $query = $pdo->prepare($sql); $query->execute([$id, $email, $optionOne, $optionTwo]); } else{ echo "All options must be entered"; }
댓글 없음:
$id = $_SESSION['u_id'] ?? NULL; if($id) { $sql = "SELECT email FROM users WHERE u_id = ?"; $query = $pdo->prepare($sql); $query->execute([$id]); $email = $query->fetchColumn(); } $email = $email ?? ""; $suggestions = selectAll($table); $optionOne = $_POST['optionOne'] ?? ""; $optionTwo = $_POST['optionTwo'] ?? ""; $newSuggestion = $_POST['new-suggestion'] ?? ""; if($newSuggestion && $id && $email && $optionOne && $optionTwo) { $sql = "INSERT INTO suggestions (user_id, email, option_1, option_2) VALUES (?, ?, ?, ?)"; $query = $pdo->prepare($sql); $query->execute([$id, $email, $optionOne, $optionTwo]); } else{ echo "All options must be entered"; }
위 내용은 MySQL 쿼리를 PDO 준비 문으로 변환하고 결과를 가져오는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!