2011-11-25 103 views
0

当我插入到mysql时,我反复得到语法错误,通常这工作正常,但我似乎无法得到它的工作。我可以回显变量没有问题,但由于某种原因,我不能插入它们。INSERT INTO语法错误,但通常应该可以工作

变量(会话瓦尔是从另一个页面带过来的)

session_start(); 
$name=$_SESSION['bName']; 
$email=$_SESSION['email']; 
$ship_address = $_SESSION['sAddress']; 
$voucher=$_SESSION['voucher']; 
$sku=$_SESSION['sku']; 
$credit_card=$_POST['credit_card']; 
$security_code=$_POST['security_code']; 
$payment_type=$_POST['payment_type']; 
$cc_number=substr($credit_card, 0, 4) . str_repeat('x', (strlen($credit_card) - 4)) . substr($credit_card, -4, 4); 
$phone=$_SESSION['billPhone']; 
$status="Redeemed"; 
$date = date('Y/m/d'); 
$tracking =""; 

插入查询

//Insert Queries 
$sqlInsert = "INSERT INTO `customers`(`name`, `email`, `address`, `phone`, `sku`, `creditcard`, `securitycode`, `paymenttype`, `voucher`, `purchase_id`, `tracking`, `status`, `date_recieved`) 

VALUES($name, $email, $ship_address, $phone, $sku, $credit_card, $security_code, $payment_type, $voucher, $purchase_id, $tracking, $status, $date)"; 
    mysql_query($sqlInsert) or die ('Error Inserting into database' . mysql_error()); 

我也试过

VALUES('$name', '$email', '$ship_address', '$phone', '$sku', '$credit_card', '$security_code', '$payment_type', '$voucher', '$purchase_id', '$tracking', '$status', '$date') 

,但它不工作。我得到的错误是

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'lastname, [email protected], 22 toronto ont l6a0l4, 416-123-4567, 10, 1234567' at line 1 

任何想法?

谢谢

+0

执行'echo $ sqlInsert'并发布输出。你必须将字符串值放入引号中,后一种方法应该可以工作,但是**必须转义和清除值! – JJJ

回答

1

必须引用所有字符串值。

VALUES("'.$name.'", "'.$email.'" ...

+0

谢谢,这工作得很好! ''。$ name。''而不是''。$ name。'“,以防其他人有同样的问题。奇怪,虽然我通常不必这样做。只是使用'$ name'通常工作得很好。噢,再次感谢!我做了 – Fahad

1

像这样做的,所以字段分隔:

VALUES('$name', '$email', ... 

检查你的错误讯息,查看您当前正在产生什么样的垃圾。

+0

,并且它没有以这种方式工作,或者 – Fahad

+0

转义值。 –

0

我几乎可以保证你在你的姓名字段中有一个单引号。如果要将单引号放入SQL中的字符串字段中,则必须将其加倍:'Jerry'的'

而且您需要'$name'版本。

1

您可以改用PDO来代替create prepared statements。那么你将不必担心逃脱你的价值观,比如drdwilcox的例子'杰里''。它也有助于防范SQL注入攻击。