mysql报语法错误

Posted

技术标签:

【中文标题】mysql报语法错误【英文标题】:mysql reporting syntax error 【发布时间】:2013-11-17 08:40:39 【问题描述】:
$sql = mysql_query("SELECT * FROM prestamos LEFT JOIN libros  on  prestamos.codlibros = libros.cod_libros where id_usuariospr =$_SESSION['idusuarios']");
$row = mysql_num_rows($sql);

//$datos = mysql_fetch_array($sql);
while($datos = mysql_fetch_array($sql)) 

    $tit = $datos['titulo'];
    $aut = $datos['autor'];
    $edit = $datos['editorial'];
    $isbn = $datos['isbn'];
    $color = $datos['color'];                
    $fechaP = $datos['fecha_prest'];
    $fecha = $datos['fecha_entrega'];
    $libro = $datos['codlibros'];

    $query = "INSERT INTO historial(titulo_his, autor_his, editorial_his, isbn_his, color_his, fecha_inicio_his, fecha_final_his, idusuarios_his, codlibros_his)
                                                    VALUES($tit, $aut, $edit, $isbn, $color, $fechaP, $fecha, $_SESSION['idusuarios'], $libro)";

    mysql_query($query) or die(mysql_error());

我试图找到错误:

您的 SQL 语法有错误;查看 与您的 MySQL 服务器版本相对应的手册 在 'del Web, Creative Commons, 123213, rojo, 2013-11-04, 2013-11-05, 127, 12)' 在第 2 行

拜托,你能帮帮我吗?我找不到错误。

【问题讨论】:

"$_SESSION['idusuarios']" 包含什么? 我认为您的会话包含一个数组。 它是$SESSION['idusuarios']$ 前面开始,而不是在里面。 这部分包含用户的id,对不起我的语言,idusuarios = idusers 【参考方案1】:

用引号将您的查询:

$query = "INSERT INTO historial(`titulo_his`, `autor_his`, `editorial_his`, `isbn_his`, `color_his`, `fecha_inicio_his`, `fecha_final_his`, `idusuarios_his`, `codlibros_his`)
                                                                VALUES('$tit', '$aut', '$edit', '$isbn', '$color', '$fechaP', '$fecha', '$_SESSION['idusuarios']', '$libro')";

问题是你试图插入字符串而不用引号括起来,所以查询会失败

PS:不要使用 mysql_* 扩展已弃用的函数。

PS2:字段名称的反引号不是必需的,但我喜欢它:)

【讨论】:

感谢您的回答,关于 $query 中的值也可以!【参考方案2】:

不要在查询中使用 php 变量。

<?php
            $sql = mysql_query("SELECT * FROM prestamos LEFT JOIN libros  on  prestamos.codlibros = libros.cod_libros where id_usuariospr =$_SESSION['idusuarios']");
            $row = mysql_num_rows($sql);

if(isset($_SESSION['idusuarios']))
    $sessionvar=$_SESSION['idusuarios'];


        while($datos = mysql_fetch_array($sql)) 

                $tit = $datos['titulo'];
                $aut = $datos['autor'];
                $edit = $datos['editorial'];
                $isbn = $datos['isbn'];
                $color = $datos['color'];                
                $fechaP = $datos['fecha_prest'];
                $fecha = $datos['fecha_entrega'];
                $libro = $datos['codlibros'];

                $query = "INSERT INTO historial(titulo_his, autor_his, editorial_his, isbn_his, color_his, fecha_inicio_his, fecha_final_his, idusuarios_his, codlibros_his)
                                                                VALUES($tit, $aut, $edit, $isbn, $color, $fechaP, $fecha, $sessionvar, $libro)";

                      mysql_query($query) or die(mysql_error());
                           

            ?>

对于字符字段值,也将它们用引号括起来。

【讨论】:

【参考方案3】:

您不需要在查询中的 php 变量附近添加花括号。 另一件事是,如果值是字符串类型,则将其用作--'.$phpvariable.'

【讨论】:

感谢您的建议,是的,我会记住的!

以上是关于mysql报语法错误的主要内容,如果未能解决你的问题,请参考以下文章

[MySQL]--MySQL表中某个列插入数据总被截断,报编码方式的语法错误,实际是column的not null属性和更改编码语法导致的冲突。

这是sqlserver的语句,改成mysql的怎么写啊。求大神指教。报语法错误。因为我的数据库用的是mysql

mysql语法错误:Every derived table must have its own alias

IDEA编译报语法错误? 可能是默认机制搞的鬼!

LEFT JOIN连接SQL语句在Access里面报语法错误(操作符丢失),哪位帮帮忙?

mybatis 批量update报语法错误解决方法