0

请看一下下面提到的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']

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

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

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

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

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

4

3 回答 3

4

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

`key`

而且你不能结合selectand values。尝试

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'
于 2012-08-09T06:57:53.947 回答
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 数组文档中的示例 #4 :

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

于 2012-08-09T06:57:50.797 回答
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子句。您不必添加它。它总是以这种方式选择单行。

于 2012-08-09T07:07:46.420 回答