2012-04-03 65 views
1

我有这样一段代码PHP,数据库问题

<?php 


$con = mysql_connect("localhost","root","password"); 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("tables", $con); 
$sql="INSERT INTO customer (Name, Telephone, Email, Address, PostCode, Specialisation) 
VALUES 
($_POST['firstname'], $_POST['telephone'],$_POST['email'],   $_POST['address'],$_POST['postcode'],$_POST['special'])"; 

if (!mysql_query($sql,$con)) 
{ 
die('Error: ' . mysql_error()); 
} 
echo "Inserted into Worker database"; 

mysql_close($con); 
?> 

我不断收到此错误 - 解析错误:语法错误,意想不到的T_ENCAPSED_AND_WHITESPACE,在期待T_STRING或T_VARIABLE或T_NUM_STRING

我不是当然还有什么要做。请帮忙。谢谢

+0

你能告诉我们哪一行导致这个错误? – Intrepidd 2012-04-03 16:50:37

+0

这一行 - ($ _ POST ['firstname'],$ _POST ['telephone'],$ _ POST ['email'],$ _POST ['address'],$ _ POST ['postcode'],$ _ POST ['特殊'])“; – Ester 2012-04-03 16:51:56

+0

我认为首先你应该通过打印来检查你正在执行的查询是否是你想要的查询用phpmyadmin检查并让我知道 – Sumant 2012-04-03 16:55:06

回答

4

你有几个问题。

首先,要插入数据库的字符串值需要单引号。

其次,在字符串数组变量需要被包裹在{}(即$string = "Something something {$_POST['variable']}...";帮助PHP解析器数字出来。

三,该代码(一次工作)是大量容易通过SQL注入入侵。考虑,或至少是运行用户输入通过mysql_real_escape_string()使用PDO和准备语句(如mysql_*功能即将过时)。

$sql="INSERT INTO customer (Name, Telephone, Email, Address, PostCode, Specialisation) VALUES ('" . mysql_real_escape_string($_POST['firstname']) . "', '" . mysql_real_escape_string($_POST['telephone']) . "', '" . mysql_real_escape_string($_POST['email']) . "', '" . mysql_real_escape_string($_POST['address']) . "', '" . mysql_real_escape_string($_POST['postcode']) . "', '" . mysql_real_escape_string($_POST['special']) . "')"; 

第四,你真的不应该使用数据库的root用户进行连接。

1

更改$sql变量来读取一行,并以适当的格式发送到SQL:

$sql="INSERT INTO customer (Name, Telephone, Email, Address, PostCode, Specialisation) VALUES ({$_POST['firstname']}, {$_POST['telephone']},{$_POST['email']}, {$_POST['address']},{$_POST['postcode']},{$_POST['special']})"; 

这应该纠正的unexpected T_ENCAPSED_AND_WHITESPACE PHP的错误,但你会需要更多的correctionsfixSQL Injection可能性。

+0

PHP在一个字符串中跨越多行就好了。 -1。 – ceejayoz 2012-04-03 16:57:15