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

什么';这里的PHP语法有什么问题?,php,Php,我很难找出这段代码中的错误。我尝试了许多变体,但在这一行中仍然出现错误: $query= "INSERT INTO publish (name, email, title, content)" . "VALUES ('$row['Name']','$row['Email']',$row['title'],$row['content'])"; 有什么不对劲吗 下面是代码的其余部分: <?php // connect to the database include('conf

我很难找出这段代码中的错误。我尝试了许多变体,但在这一行中仍然出现错误:

$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);

 }

?>
您忘记了变量和字符串之间的“.”。像这样:

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

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

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

$query= "INSERT INTO publish (name, email, title, content)" .
"VALUES ('{$row['Name']}','{$row['Email']}',{$row['title']},{$row['content']})";
尽管这只会解决代码中的一个问题

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


在某些情况下,阅读字符串上的注释也可能是值得的。

PHP中的最佳实践是对字符串使用单引号
。Cos-PHP在双引号字符串中查找变量,并不断嗅探字符串中是否有变量(或多个变量)

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

根据我的经验,在我很小的时候,我就在一个非常大的php脚本上工作,并且到处都使用双引号。在一位专家作了上述解释之后,我将整个脚本转换为单引号,性能更好

所以对于你的情况,我建议并要求使用单引号,这样也可以避免混淆。另外,使用
mysql\u real\u escape\u string()
是避免
SQL注入的一个好方法

$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']) . '\')';

如果你能展示这行代码的其余部分那就太好了。。。像什么是
$row
…?不确定,但尝试在值之前添加一个空格以及错误消息是什么?尝试以下操作:$query=“插入到发布(名称、电子邮件、标题、内容)值(“““$row['name']”、““$row['email']”、$row['title']、$row['content']”);你知道你实际上并没有在代码中运行查询,对吗?@chris85只是试图回答OP关于PHP错误的问题。SQL问题可以在一个单独的问题中解决,如果OP想问的话。啊哈,我没有注意到OP在那里添加了实际的错误消息。很公平。在您的回答中可能值得注意的是,还有许多其他原因导致他们的代码无法按预期执行。@chris85 Done.:)打得好。谢谢你解决了解析错误。你是对的,INSERT没有运行,我将其更改为这个
$query=mysql\u查询(“插入到发布(名称、电子邮件、标题、内容”)。“值({$row['name']},{$row['email']},{$row['title']},{$row['content']})”
但仍然没有running@vyt45它可能会抱怨,因为你在标题和内容的值周围没有引用名称和电子邮件。谢谢你的帮助。我也这样做了,但表中仍然没有任何内容。不知道现在问题出在哪里。如果你一直坚持,你可以随时打开一个新问题。Using双引号和单引号(大部分)对性能的影响微乎其微,您可能不会注意到。特别是在涉及到其他服务的连接时,它几乎不会成为瓶颈。