2017-10-05 5 views
0
<?php 
    require 'functions/connection.php'; 
    $conn = Connect(); 
    $e_id = $conn->real_escape_string($_POST['e_id']); 
    $first_name = $conn->real_escape_string($_POST['first_name']); 
    $last_name = $conn->real_escape_string($_POST['last_name']); 
    $e_salary = $conn->real_escape_string($_POST['e_salary']); 
    $e_startdate = $conn->real_escape_string($_POST['e_startdate']); 
    $e_department = $conn->real_escape_string($_POST['e_department']);   
    $sql = "UPDATE employee SET firstname='$first_name' WHERE id=$e_id"; 
    if (mysqli_query($conn, $sql)) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . mysqli_error($conn); 
    } 
    mysqli_close($conn); 
?> 

私は更新クエリ内でfirst_name変数を使用しようとしています。PHPでmysqlの更新クエリを使用する

私は変数とその作業をエコーし​​ようとしました... これは私が使用している接続コードです。

<?php 


function Connect() 
{ 
$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = ""; 
$dbname = "company"; 

// Create connection 
$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname) or die($conn->connect_error); 

return $conn; 
} 

?> 

IIの場合(現在のオブジェクト) "データベースは

+1

エラーが発生しますか?また、 'オブジェクト指向'と '手続き'の方法を混在させています。 –

+0

'$ e_id'変数を一重引用符で囲みます – SC92

+1

ベストプラクティスはプリペアドステートメントを使用することです。 PDOはこれには適していますが、mysqliを使用して設定している場合は、http://php.net/manual/en/mysqli.prepare.php –

答えて

0

functions/connection.phpを更新なっている" との間には何もして変数を置き換える:に

<?php 
class Connect 
{ 
private $dbhost = "localhost"; 
private $dbuser = "root"; 
private $dbpass = ""; 
private $dbname = "company"; 

public $conn; 

public function __construct() 
{ 
    if($this->conn = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname)) 
    { 
     //connection established 
     //do whatever you want here 
    } 
    else 
    { 
     //Error occurred 
     die($this->conn->error); 
    } 
} 

//other functions here 

} 

?> 

変更mysqli_query:準備$conn->conn->query($sql);

ステートメント: Avoid SQLI injection

if($stmt = $conn->conn->prepare("UPDATE employee SET firstname = ? WHERE id = ?")) 
{ 
    $stmt->bind_param('si', $first_name, $e_id); 
    $stmt->execute(); 
    echo $stmt->affected_rows; 
} 

決勝コード:

<?php 
    require 'functions/connection.php'; 
    $conn = new Connect(); 
    $e_id = $conn->conn->real_escape_string($_POST['e_id']); 
    $first_name = $conn->conn->real_escape_string($_POST['first_name']); 
    $last_name = $conn->conn->real_escape_string($_POST['last_name']); 
    $e_salary = $conn->conn->real_escape_string($_POST['e_salary']); 
    $e_startdate = $conn->conn->real_escape_string($_POST['e_startdate']); 
    $e_department = $conn->conn->real_escape_string($_POST['e_department']);   

    if($stmt = $conn->conn->prepare("UPDATE employee SET firstname = ? WHERE id = ?")) 
    { 
     $stmt->bind_param('si', $first_name, $e_id); 
     $stmt->execute(); 
     echo $stmt->affected_rows; 
    } 
    $conn->conn->close(); 
?> 
+3

これはお勧めしません - あなたはこの種のものについて準備されたステートメントを使用する必要があります –

+0

更新された回答@ChrisJ – SaltyPotato

1

私はそれをより安全にすると、プリペアドステートメントを使用して、お勧めしたいです。これはmysqliのを使用した例ですが、私はPDOを好む:

<?php 
     require 'functions/connection.php'; 
     $conn = Connect(); 

     // Prepare the query 
     $myQuery = $conn->prepare("UPDATE employee SET firstname=? WHERE id=?"); 

     $e_id = $conn->real_escape_string($_POST['e_id']); 
     $first_name = $conn->real_escape_string($_POST['first_name']); 
     $last_name = $conn->real_escape_string($_POST['last_name']); 
     $e_salary = $conn->real_escape_string($_POST['e_salary']); 
     $e_startdate = $conn->real_escape_string($_POST['e_startdate']); 
     $e_department = $conn->real_escape_string($_POST['e_department']);   

     // Bind your variables to the placemarkers (string, integer) 
     $myQuery->bind_param('si', $first_name, $e_id); 

     if ($myQuery->execute() == false) { 
     echo 'Error updating record: ' . $mysqli->error; 
     } 
     else { 
     echo 'Record updated successfully'; 
     } 
     $myQuery->close(); 

    ?> 

注:「クレンジング」あなたが途中でやっている私は残っているが、それは準備された文で、本当に必要はありません。

+0

実際には、あなたは 'クレンジング'を削除したい、 'O'hara'などの人々のためのレコード... –

+0

このインスタンスでは、それは整数IDのルックアップのように見えます。私はOPのためにそれをすることとレーダーの下で行く問題とは反対に、話す点のためにそこに残したかったが、あなたは絶対に正しい。 –

関連する問題