2013-03-26 182 views
0

我想使用下面的PHP代碼將信息添加到MySQL表。 (輸入來自HTML5基本Web表單的名稱和文本。)可能是語法問題?mysqli_query輸入通過變量

<?php 
include "dbinfo.php"; //contains mysqli_connect information (the $mysqli variable) 
//inputs 
$name = $_GET["name"]; 
$text = $_GET["text"]; 

$sqlqr = 'INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ("$name", "$text", CURRENT_TIMESTAMP);'; //the query. I'm pretty sure that the problem is a syntax one, and is here somewhere. 

mysqli_query($mysqli,$sqlqr); //function where the magic happens. 
?> 

沒有錯誤發生。結果爲空白,並且具有「$ name」和「$ text」的行被添加到MySQL表中。

+0

警告!您的代碼很容易受到SQL注入攻擊。閱讀如何逃避SQL變量,最好使用Prepared Statements。 – Spudley 2013-03-26 16:56:22

+0

根據發佈的代碼,插入的行和黑屏正是我所期望的。 – 2013-03-26 16:56:33

+0

mysqli_error()返回什麼? – Jocelyn 2013-03-26 16:57:02

回答

1

這是你的代碼應該是什麼樣子(加入SQL注入防護):

<?php 
include "dbinfo.php"; //contains mysqli_connect information (the $mysqli variable) 
//inputs 
$name = mysqli_real_escape_string($_GET['name']); 
$text = mysqli_real_escape_string($_GET['text']); 

$sqlqr = "INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ('" . $name . "', '" . $text . "', CURRENT_TIMESTAMP);"; 

mysqli_query($mysqli,$sqlqr); //function where the magic happens. 
?> 

看看我做了什麼。首先,我已經逃過了用戶輸入,您將檢索到$name$text變量(這對於安全原因來說非常必要),而其他人則建議您最好使用預準備語句。

問題是你沒有用單引號(')來包圍字符串值,這是SQL語法的一個要求。

我希望這有助於回答你的問題。

+0

謝謝。這似乎給出了一些錯誤(在$ sqlqr行和輸入),但我敢肯定,我知道那裏發生了什麼,並將解決它。 – nocoolsoft 2013-03-26 17:31:04

+0

@ EM-Creations您需要修復單引號和雙引號。 – Jocelyn 2013-03-26 17:41:49

+0

@Jocelyn更新。 – 2013-03-27 09:04:15

-3
$sqlqr = 'INSERT INTO `ncool`.`coolbits_table` (`name`, `text`, `date`) VALUES ("'.$name.'", "'.$text.'", CURRENT_TIMESTAMP)'; 

保持你的變量在引號外。

+0

您未引用價值 – Uby 2013-03-26 16:58:06

2

首先:您應該使用mysqli預準備語句來防止SQL注入攻擊。 如果沒有正確轉義,在查詢中使用用戶輸入並不安全。預防性陳述對防止這種情況很有用。

第二:你應該學會如何進行字符串引用作品PHP,單引號字符串和雙引號字符串不同

我會推薦閱讀PHP documentation約串引用。

+0

會查看並閱讀它。我認爲我已經讀完了,但我想我需要再看一遍。 – nocoolsoft 2013-03-26 17:09:07