这里的PHP语法有什么问题?

时间:2015-06-04 23:54:32

标签: php

我很难弄清楚这段代码中有什么问题。我尝试了很多变化,但仍然在这一行中出错:

$query= "INSERT INTO publish (name, email, title, content)" .
    "VALUES ('$row['Name']','$row['Email']',$row['title'],$row['content'])";

可能出现什么问题?

这是代码的其余部分:

<?php


 // connect to the database
 include('config2.php');

 // check if the 'id' variable is set in URL, and check that it is valid
 if (isset($_GET['id']) && is_numeric($_GET['id']))
 {
 // get id value
 $id = $_GET['id'];

 $dbc = mysqli_connect('localhost', 'x', 'x', 'x')
    or die('Error');

    $name = $row['Name'];
    $email = $row['Email'];
    $title = $row['title'];
    $content = $row['content'];


    $result = mysql_query("select *stories WHERE id=$id")
             or die(mysql_error()); 

    $row = mysql_fetch_array( $result );
    $query= "INSERT INTO publish (name, email, title, content)" .
    "VALUES ('$row['Name']','$row['Email']',$row['title'],$row['content'])";

   or die('Error querying database.');

  mysqli_close($dbc);

 }

?>

错误消息:“解析错误期望标识符(t_string)”或变量(t_variable)'或数字(t_num_string)'“

3 个答案:

答案 0 :(得分:4)

您可能希望使用复杂的字符串语法来正确插入这些变量。例如:

$query= "INSERT INTO publish (name, email, title, content)" .
"VALUES ('{$row['Name']}','{$row['Email']}',{$row['title']},{$row['content']})";

虽然这只会解决代码中的一个问题。

请注意,还有很多其他方法可以解决这个问题,例如连接而不是插值,或者字符串替换等等。

在某些时候也可能值得阅读documentation字符串。

答案 1 :(得分:0)

你忘记了&#34;。&#34;变量和字符串之间。像这样:

$query= "INSERT INTO publish (name, email, title, content)" .
    "VALUES (".$row['Name'].','.$row['Email'].','.$row['title'].','.$row['content'].")";

但是,看起来您可能会在实际的SQL查询中遇到一些其他问题。

答案 2 :(得分:0)

PHP中的最佳做法是对字符串使用单引号'。 Cos PHP在双引号字符串中查找变量,并继续嗅探字符串中是否有变量(或多个变量)。

所以例如:“一个非常长的字符串... $ var1 .. long string .. $ var2 string”与'非常长的字符串...'相比,这将运行得更慢。 $ var1。 '..长串..'。 $ var2。 'string';当PHP看到单引号时,它不会嗅探其中的变量,因此它更快。

根据我的经验,我从小就开发了一个非常大的PHP脚本并且到处使用双引号。经过专家的上述解释后,我将整个脚本转换为单引号,性能要好得多。

因此,根据您的情况,我建议并请求使用单引号,这也可以避免混淆。同样使用mysql_real_escape_string()是避免SQL Injection的好习惯。

$query= 'INSERT INTO publish (name, email, title, content) 
VALUES (
\'' . mysql_real_escape_string ($row['Name']) . '\',
\'' . mysql_real_escape_string ($row['Email']) . '\', 
\'' . mysql_real_escape_string ($row['title']) . '\',
\'' . mysql_real_escape_string ($row['content']) . '\')';