【问题标题】:I got error and i can't fix.. SQL ERROR in PHP我有错误,我无法修复.. PHP 中的 SQL 错误
【发布时间】:2015-03-10 23:11:17
【问题描述】:

我遇到了错误,我无法修复..

response error:
Database query failedYou have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near '' as Loreta Punzalan'}, 
gender  = {'Female'}, dob = {'01/23/20' at line 2 

JS AJAX

$("button.update_btn").click(function(event){
        //alert("test");
        var clickedEditid = this.id.split('-');
        var dbId = clickedEditid[1];
        var mydata = '&recordToBeUpdated='+ dbId;
        var mydatas = $('#instructorUps').serialize();
            var datas = mydatas+mydata;
        //alert(datas);
        $.ajax({
            type:"POST",
            url:"<?php echo get_stylesheet_directory_uri(); ?>/includes/response_instructor_update.php?>",
            dataType:"text",
            data: datas,
            success: function(response){
                alert(response);
            // $('#ins_'+dbId).fadeIn();
                //$('#instructorModal').append(response);
                location.reload();
                },
            error:function(xhr, ajaxOption, thrownError){
                alert(thrownError);
                }

            });
        });

Response_instructor_update.php

<?php
// Response for AJAX

require_once("connection.php");
require_once("functions.php");
if(isset($_POST['fullnameup'])){

        $idupdate     =   mysql_prep($_POST["recordToBeUpdated"]);
        $fullname     =   mysql_prep($_POST["fullnameup"]);
        $username     =   mysql_prep($_POST["usernameup"]);
        $gender       =   mysql_prep($_POST["genderup"]);
        $dob          =   mysql_prep($_POST["dobup"]);
        $nationality  =   mysql_prep($_POST["nationalityup"]);
        $mobile       =   mysql_prep($_POST["mobileup"]);
        $emailadd     =   mysql_prep($_POST["emailaddup"]);
        $address      =   mysql_prep($_POST["addressup"]);
        $zipcode      =   mysql_prep($_POST["zipcodeup"]);
$query  = "UPDATE instructor SET    
            instructor    = {'$fullname'},
            gender        = {'$gender'},
            dob           = {'$dob'},
            nationality   = {'$nationality'},
            mobile       = {$mobile},
            emailadd     = {'$emailadd'},
            address      = {'$address'},
            zipcode      = {$zipcode},
            username     = {'$username'}
            WHERE instructorid= {$idupdate}";   
    $updatedInstructor = mysql_query($query,$connection);
    confirm_query($updatedInstructor);

    if (mysql_affected_rows() == 1){

        echo "TRUE";
        mysql_close($connection);
        }else{
            die("Database query failed". mysql_error());

            } 
    }
    ?>

【问题讨论】:

  • 您对{} 封装的意图是什么?因为很可能他们错了。
  • 是的,如果你想在插值时使用{},那么它们需要直接放在变量旁边(即{$fullname}。将大括号放在单引号之外,{'$fullname'},将不起作用;大括号将只是查询的一部分,这会给您带来语法错误。

标签: php mysql sql ajax


【解决方案1】:

我认为你的想法是正确的。但是,您有一个轻微的语法问题。

我相信您的变量没有评估为字符串,而 MySQL 期待字符串。请尝试以下方法:

$query  = "UPDATE instructor SET    
        instructor    = '{$fullname}',
        gender        = '{$gender}',
        dob           = '{$dob}',
        nationality   = '{$nationality}',
        mobile       = {$mobile},
        emailadd     = '{$emailadd}',
        address      = '{$address}',
        zipcode      = {$zipcode},
        username     = '{$username}',
        WHERE instructorid= {$idupdate}"; 

请注意,单引号 (') 在大括号 ({}) 之外。您必须在 MySQL 需要字符串的任何位置添加引号(列类型为 text/varchar/etc..)。

- 更新-

正如 sverri 所说,它们实际上被视为字符串。这里的问题是 php 的插值有微小的变化:您可以在双引号 (") 字符串中使用 {$variable} 或简单地使用 $variable。在您的帖子中,您有 {'$variable'} 使用 @987654325 进行插值@ 方法,当您打算用 PHP 替换它们时,只需将大括号视为字符串的一部分。

【讨论】:

  • 据说:电话号码和邮政编码不是数字。它们是恰好由数字组成的字符串。养成这样对待他们的习惯,这会让你以后的生活更轻松。
  • @cHao 的意思是,您会发现数据捕获的最佳实践值得您将移动和邮政编码视为字符串。例如,想象:(333)333-4444。或 5+4 位邮政编码:55555-4444 - 括号/破折号需要与字符串兼容的数据类型。甚至更糟;您的数字以 0 开头,因此前面的 0 被删除。
  • 变量正在被评估为字符串。问题是花括号也被视为字符串,除非它们直接包装变量。
  • 确实如此! @kerns 谢谢!!感谢其他 cmets.. 它有帮助.. 干杯
  • @SverriM.Olsen:我特别关注 SQL 中 mobilezipcode 的值周围缺少引号的情况。没有它们,MySQL 会将这些值视为数字——如果值中包含非数字,这将被破坏。 (不过,它正在完成,这向我暗示这些字段实际上被声明为数字。这本身就是错误的。)
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 2019-09-14
  • 2019-10-27
  • 1970-01-01
相关资源
最近更新 更多