我很难弄清楚这段代码中有什么问题。我尝试了很多变化,但仍然在这一行中出错:
$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)'“
答案 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']) . '\')';