SQL错误:语法错误,意外''(T_ENCAPSED_AND_WHITESPACE)

时间:2012-08-09 06:54:08

标签: php sql database

请查看下面提到的SQL:

$sql ="INSERT INTO
    demo_participant
    (name, meeting_id_id, password, user_view__url, key, contact_no, email)
    VALUES
    ('$part_name', (SELECT id FROM demo_meeting WHERE meetingID = '$mtngid'),
    '$attendee_password', '$join_url', $getit_part['data'], '$pr_mobile',
    '$pr_email')";

我的问题是上面的语句没有键及其关联值$getit_part['data']

正常工作

但是每当我试图存储键值时,我都会收到错误,即:

  

解析错误 / opt / lampp / htdocs / UI中的语法错误,意外的''(T_ENCAPSED_AND_WHITESPACE),期待标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING) /user/joinmeeting.php 86

当我将$getit_part['data']的值存储在另一个变量$key中时,我得到了:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'key,contact_no,email'附近使用正确的语法VALUES('Rohitn',(第1行的SELECT id FROM demo_meeting WHERE'

我知道我正在做一些语法错误但无法调试它。

3 个答案:

答案 0 :(得分:4)

key是MySQL中的保留字。用反引号逃避它

`key`

并且您无法合并selectvalues。尝试

INSERT INTO demo_participant(name, 
                             meeting_id_id, 
                             password, 
                             user_view__url, 
                             `key`, 
                             contact_no,
                             email)
SELECT '$part_name', 
       id, 
       '$attendee_password',
       '$join_url',
       '$getit_part['data']',
       '$pr_mobile',
       '$pr_email'
FROM demo_meeting
WHERE meetingID = '$mtngid'

答案 1 :(得分:0)

用大括号封装你的数组:

$sql ="INSERT INTO
    demo_participant
    (name, meeting_id_id, password, user_view__url, key, contact_no, email)
    VALUES
    ('$part_name', (SELECT id FROM demo_meeting WHERE meetingID = '$mtngid'),
    '$attendee_password', '$join_url', {$getit_part['data']}, '$pr_mobile',
    '$pr_email')";

参见PHP Array Documentation上的示例#4:

  

与在Perl中一样,您可以从双引号内的数组中访问值。但是,使用PHP,您需要将数组括在大括号之间。

答案 2 :(得分:0)

第一个错误:您只能将诸如$key之类的简单变量放入SQL代码中。所有表达式(如数组引用($getit_part['data']))都需要包含在{}中,以便PHP进行评估,并将结果作为变量替换为SQL。

第二个错误:SQL语法不允许将子查询放入VALUES语句的INSERT子句中。请尝试使用INSERT ... SELECT ...语法,例如:

INSERT INTO dest (col1, col2)
SELECT val1, (SELECT val2 FROM table2 WHERE ...)

请注意,没有FROM子句。您不必添加它。它总是以这种方式选择单行。