什么';这里的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双引号和单引号(大部分)对性能的影响微乎其微,您可能不会注意到。特别是在涉及到其他服务的连接时,它几乎不会成为瓶颈。