MySQL语法错误:我缺少什么?

时间:2014-05-07 15:26:08

标签: php sql-insert

尝试执行以下代码时出现此错误:

  

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在' desc,dir,pais,tel,fax,email,url,pic)附近使用正确的语法。值' lucent' ,' que lio',' sadsad' dsadsa'在第1行

<?php 
    include('config.php');
    if(isset($_POST['submit'])) {
        $usuario = $login_session;
        $name = $_POST['empname'];
        $desc = $_POST['empdesc'];
        $dir = $_POST['empdir'];
        $pais = $_POST['empais'];
        $tel = $_POST['emptel'];
        $fax = $_POST['empfax'];
        $email = $_POST['empemail'];
        $url = $_POST['empurl'];
        $pic = 'nopic.png';

        $success = "INSERT INTO empresas
                (usuario,name,desc,dir,pais,tel,fax,email,url,pic) 
            VALUES('$usuario','$name','$desc','$dir','$pais',
                '$tel','$fax','$email','$url','$pic')";

        $data = mysql_query ($success)or die(mysql_error());

    }

5 个答案:

答案 0 :(得分:1)

您遇到的语法错误是因为descMySQL reserved word

如果您想将其用作字段名称,则需要引用它;

INSERT INTO empresas(usuario, name, `desc`, dir, pais, tel, fax, email, url, pic) VALUES ... 

您还应该强烈考虑不使用已弃用的mysql_* API,较新的API(如PDO或MySQLi)可让您访问准备好的语句,这些语句会阻止您的代码出现问题的SQL injection

答案 1 :(得分:0)

你不能使用&#34; desc&#34;作为列名,因为它已经在MYSQL中使用

答案 2 :(得分:0)

您的专栏名称&#39; desc&#39;是mysql的保留字,请检查Mysql Reserved Words

答案 3 :(得分:0)

为desc列添加反引号,如下所示

$success = "INSERT INTO empresas(usuario,name,`desc`,dir,pais,tel,fax,email,url,pic) VALUES ('$usuario','$name','$desc','$dir','$pais','$tel','$fax','$email','$url','$pic')";

或者可能只使用其他列名称

答案 4 :(得分:0)

任何时候你看到这个:

... for the right syntax to use near...

错误是在“近”告诉你的那一刻。在这种情况下,它是单词desc,它是SQL中的保留字(用于按降序排序)。我建议使用它作为列名(或任何其他保留字),但如果这不可能,那么你只需要将它包装在反向标记中以表明它是一个对象名称和不是关键字:

INSERT INTO empresas(usuario,name,`desc`,dir,pais,tel,fax,email,url,pic)...

无论如何,包装这样的对象名称通常是一个好主意,使查询更加明确。老实说,你应该更进一步,使用像PDO这样的东西来构建你的查询。至少,请注意您当前的代码是 非常容易受到攻击 到SQL注入攻击并开始阅读this