2015-07-19 70 views
-1

我在PHP有一個網站。當登錄用戶訪問我網站上的特定網頁時,我嘗試將會話變量$_SESSION['user_name']存儲到mysql數據庫。php store會話變量在mysql數據庫中

<?php 
$servername = "localhost"; 
$username = "user1"; 
$password = "user1"; 
$dbname = "payment"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); 
} 
$sql = 'INSERT INTO users 
VALUES ('.$_SESSION['user_name'].')'; 

if ($conn->query($sql) === TRUE) { 
echo "New record created successfully"; 
} else { 
echo "Error: " . $sql . "<br>" . $conn->error; 
} 

$conn->close(); 
?> 

錯誤消息:

說明:未定義變量:_SESSION在/opt/lampp/htdocs/succes.php第16行

嘗試了一串東西,但可以」弄明白了。這裏有什麼問題?

+0

1.你在哪裏開始您的會話發現了什麼? 2.請參閱:http://stackoverflow.com/q/11321491/3933332 – Rizier123

回答

0

您需要在腳本的開頭呼叫session_start()(在使用任何$_SESSION變量之前)。另外,你需要周圍的變量報價在您查詢:

$sql = 'INSERT INTO users 
VALUES ("'.$_SESSION['user_name'].'")'; 

請注意,這是安全;你是開放的SQL注入。在您使用需要調用session_start()任何$_SESSION變量

<?php 
$servername = "localhost"; 
$username = "user1"; 
$password = "user1"; 
$dbname = "payment"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$sql = 'INSERT INTO users 
VALUES (?)'; 

$stmt = $conn->prepare($sql); 
$stmt->bind_param('s', $_SESSION['user_name']); 

if ($stmt->execute()) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

$conn->close(); 
?> 
+0

這是可行的。感謝您讓我知道這是易受sql注入。有沒有辦法避免這種情況? – Fille

+0

@Fille是的,我添加了一些示例代碼。 –

+0

謝謝你閱讀準備好的聲明。非常有幫助! – Fille

0

:相反,你應該使用準備好的語句。

雖然有點話題,但可以看看PDO。它可能比mysqli()慢一點,但支持更多的數據庫類型。這裏有一篇關於Tuts+的好文章,解釋了一些差異,並解釋了基本的安全步驟。

如果我能有點偏我創建了一個PHP類爲PDO的連接可以在GitHub

+0

謝謝,我會一直關注它。 – Fille