[SQL] PHP는 PDO에 오래된는 mysql_query 변경
SQLPHP는 PDO에 오래된는 mysql_query 변경
난 내가 PDO에 변환 할 만 일에 도착하기 위해 고군분투 내 코드에서 오래된는 mysql_query 쿼리가 있습니다.
내 원래의 코드를했다 :
mysql_query("UPDATE people SET price='$price', contact='$contact', fname='$fname', lname='$lname' WHERE id='$id' AND username='$username' ")
or die(mysql_error());
지금은 노력하고 있습니다 :
$sql = "UPDATE people SET price='$price', contact='$contact', fname='$fname', lname='$lname' WHERE id='$id' AND username='$username'";
$q = $conn->query($sql) or die("failed!");
하지만, 작품에 어떤 아이디어를 얻을 수없는 것?
업데이트 된 코드 :
$conn = new PDO("mysql:host=$host;dbname=$db",$user,$pass);
// check if the form has been submitted. If it has, process the form and save it to the database
if (isset($_POST['submit']))
{
// confirm that the 'id' value is a valid integer before getting the form data
if (is_numeric($_POST['id']))
{
// get form data, making sure it is valid
$id = $_POST['id'];
$fname = mysql_real_escape_string(htmlspecialchars($_POST['fname']));
$lname = mysql_real_escape_string(htmlspecialchars($_POST['lname']));
$contact = mysql_real_escape_string(htmlspecialchars($_POST['contact']));
$price = mysql_real_escape_string(htmlspecialchars($_POST['price']));
// check that firstname/lastname fields are both filled in
if ($fname == '' || $lname == '' || $contact == '' || $price == '' )
{
// generate error message
$error = 'ERROR: Please fill in all required fields!';
//error, display form
renderForm($id, $fname, $lname, $contact, $price, $error);
}
else
{
// save the data to the database
$username = $_SESSION['username'];
$query = "UPDATE people
SET price=?,
contact=?,
fname=?,
lname=?
WHERE id=? AND
username=?";
$stmt = $db->prepare($query);
$stmt->bindParam(1, $price);
$stmt->bindParam(2, $contact);
$stmt->bindParam(3, $fname);
$stmt->bindParam(4, $lname);
$stmt->bindParam(5, $id);
$stmt->bindParam(6, $username);
$stmt->execute();
// once saved, redirect back to the view page
header("Location: view.php");
}
해결법
-
==============================
1.자세한 내용은이 링크를 방문 : PHP PDO를
자세한 내용은이 링크를 방문 : PHP PDO를
귀하의 예에 따라,
<?php $query = "UPDATE people SET price=?, contact=?, fname=?, lname=? WHERE id=? AND username=?"; $stmt = $dbh->prepare($query); $stmt->bindParam(1, $price); $stmt->bindParam(2, $contact); $stmt->bindParam(3, $fname); $stmt->bindParam(4, $lname); $stmt->bindParam(5, $id); $stmt->bindParam(6, $username); $stmt->execute(); ?>
PDO는 문과 저장 프로 시저를 준비
-
==============================
2.PDO에 대한 MySQL의 드라이버와 함께 작업 할 때 당신은 항상 비활성화 에뮬레이트 준비된 명령문에있는 것을 참고 :
PDO에 대한 MySQL의 드라이버와 함께 작업 할 때 당신은 항상 비활성화 에뮬레이트 준비된 명령문에있는 것을 참고 :
$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'UPDATE people SET'; $sql.= ' price = :price,'; $sql.= ' contact = :contact,'; $sql.= ' fname = :fname,'; $sq;.= ' lname = :lname'; $sql.= ' WHERE id= :id AND username = :username'; $stmt = $pdo->prepare($sql); $stmt->execute(array( ':price' => $price, ':contact' => $contact, ':fname' => $fname, ':lname' => $lname, ':id' => $id, ':username' => $username, ));
당신이 볼 수 있듯이 나는 당신이 그들을 많이 가지고 때 이럴 방법이 명확하기 때문에 당신이 무엇을하고 있는지, 명명 된 매개 변수를 사용했다.
참고 : ircmaxell은 항상 실제 준비된 문을 사용하려면 기본을 얻기에 노력하고 있습니다 만, 그 때까지 (일부 시간이 걸릴 수 있음) 당신은 항상 MySQL 용을 해제해야 할 것이다.
-
==============================
3.당신이 PDO를 사용하는 거라면, 당신은 준비보고 ()하고, 그렇지 않으면 당신은 PDO가 제공하고있는 보안을 상실하고, SQL 주입을 유지하고 실행해야합니다. 따라서, 귀하의 예제를 제공 :
당신이 PDO를 사용하는 거라면, 당신은 준비보고 ()하고, 그렇지 않으면 당신은 PDO가 제공하고있는 보안을 상실하고, SQL 주입을 유지하고 실행해야합니다. 따라서, 귀하의 예제를 제공 :
$conn = new PDO(/*connection info*/); $query = $conn->prepare("UPDATE people " . "SET price = :price, " . " contact = :contact, " . " fname = :fname, " . " lname = :lname " . "WHERE id = :id " . " AND username = :username"); $result = $query->execute(array( ':price' => $price, ':contact' => $contact, ':fname' => $fname, ':lname' => $lname, ':id' => $id, ':username' => $username ));
즉 더 느슨한의 방법입니다,하지만 당신은 할 수 bindParam과 기대의 형태의 데이터에 관해서는 명시.
-
==============================
4.PDO 확장을 사용하는 일을 얻을 수있는 여러 가지 방법이 있다는 것입니다 동안 몇 가지 당신은 명확해야한다.
PDO 확장을 사용하는 일을 얻을 수있는 여러 가지 방법이 있다는 것입니다 동안 몇 가지 당신은 명확해야한다.
현재 몇 등을 포함한 그 중 하나 인 사용 방법. 그러나이 항상 별도로 바인드 매개 변수에 좋은 아이디어 인이 방지 때문에 SQL 주입 및 더 많은 같은 많은 문제.
보기에 다른 중요한 일들은 준비하고 실행 문입니다.
$conn = new PDO("...."); //Creating the handler //Create the statement $stmt = $conn -> prepare("UPDATE people SET price = :price, contact = :contact, fname = :fname, lname = :lname WHERE id= :id AND username = :username"); // Bind the params $stml -> bindParam(":contact", $contact, PDO::PARAM_STR); //This way you can also define the DATATYPE of the parameter //Execute $stmt -> execute(array( ":price" => $price, //another way of binding the params ":fname" => $fname, ":lname" => $lname, ":id" => $id, ":username" => $username));
from https://stackoverflow.com/questions/12310238/php-changing-old-mysql-query-to-pdo by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 그룹에 의해 분 (MySQL의) (0) | 2020.07.16 |
---|---|
[SQL] 열은 IN 절에 존재하지 않지만 SQL 실행 (0) | 2020.07.16 |
[SQL] 어떻게 SQL Server 2008 R2의 일 / 월 / 연도에 시스템 날짜 형식을 변환하는? (0) | 2020.07.16 |
[SQL] 다른 데이터 유형과 외래 키를 설정 (0) | 2020.07.16 |
[SQL] SQL 서버 2012 년 등록 CLR 기능 (WCF 기반) (0) | 2020.07.16 |