2011-09-27 90 views
0

我想知道是否有人可以帮助我解决这个烦人的问题。尝试将一些数据插入到表中。与此同时,我想省略一些领域,而不是在那里插入某些东西。出于某种原因,我得到Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING错误。有什么我在下面做错了吗?插入MySQL表错误

您的帮助将不胜感激。

 <?php 

     function sqlEscape($string){  
     return "'".mysql_real_escape_string($string)."'"; 
     } 

       if(  $_GET['location'] == '' 
       || $_GET['name']  == '' 
        || $_GET['school'] == '' 
       || $_GET['reason'] == ''    
        || $_GET['address'] == '' 
       || $_GET['postcode'] == '' 
       || $_GET['email']  == '' 
       || $_GET['telephone'] == '') {  

     exit('You missed a value'); 
    } 
include('theConfig.php'); 
$con = mysql_connect($host, $username, $password) or die(mysql_error()) ; 


    if (!$con){ 
    die('Could not connect: ' . mysql_error()); 
    } mysql_select_db($db, $con); //$description = mysql_real_escape_string($_GET[description]); 


$sql = sprintf('INSERT INTO applications (location, name, school, reason, address, postcode, email, telephone, town, county, state, country) 
     VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,'','')', 

       sqlEscape($_GET['location']),         
       sqlEscape($_GET['name']),     
       sqlEscape($_GET['school']),       
       sqlEscape($_GET['reason']),     

       sqlEscape($_GET['address']),     
       sqlEscape($_GET['postcode']),     
       sqlEscape($_GET['email']),     
       sqlEscape($_GET['telephone'])); 

     if (!mysql_query($sql,$con)){  
      die('Error: ' . mysql_error()); 
     } 
     header('Location: thankyou.php');  
     mysql_close($con) 

?> 

回答

0
$sql = sprintf('INSERT INTO applications (location, name, school, reason, address, postcode, email, telephone, town, county, state, country) 
     VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,'','')', 

你有“”,“”)“这是不正确,b/C在这个序列中的第一次报价关闭字符串,因此它实际上是三个字符串togather:” INSERT。 ..',然后',',然后')'。你必须转义字符串与反斜杠引号或用双引号括整个字符串:

(逃逸)

$sql = sprintf('INSERT INTO applications (location, name, school, reason, address, postcode, email, telephone, town, county, state, country) 
     VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,\'\',\'\')', 

(使用双引号)

$sql = sprintf("INSERT INTO applications (location, name, school, reason, address, postcode, email, telephone, town, county, state, country) 
     VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,'','')", 
+0

并且在修复此编译时错误之后,您将得到另一个运行时“参数太少”错误。以下答案描述了如何修复它。 – kstep

+0

谢谢,这有帮助。现在就开始工作了。感谢所有给我建议和帮助的人。我很感激。 –

0

你在你的sprintf()调用中使用的字符串单引号,但你也可以使用单引号的字符串内为好。

1

你应该已经建立了镇,县价值观 - 或者用默认值(空字符串和其他人一样)设置:

$sql = sprintf("INSERT INTO applications (location, name, school, reason, address, postcode, email, telephone, town, county, state, country) 
     VALUES(%s, %s, %s, %s, %s, %s, %s, %s, '','','','')", ...) 

编辑: 此外 - 用双引号包围第一sprintf参数单引号内使用...

+0

谢谢,但你可以在上面看到我对城镇和县有空值。不知道是否有什么我失踪。 –

0

尝试改变

function sqlEscape($string){  
    return "'".mysql_real_escape_string($string)."'"; 
    } 

function sqlEscape($string){  
    return mysql_real_escape_string($string); 
} 

或更好,但只是把它放在你的sprintf

$sql = sprintf('INSERT INTO applications (location, name, school, reason, address, postcode, email, telephone, town, county, state, country) 
    VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','','')', 

      mysql_real_escape_string($_GET['location']), 

等等

注意到我改变%s到 '%s' 的