Php 错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解使用near';
当用户输入youtube url并从url获取youtube id时,将使用下面的代码。然后,它获取具有该id的视频的标题。然后将该标题插入数据库并调用以显示与该id关联的视频图像 如果我使用此youtube url或其他youtube url。如果youtube url的标题包含一个“ie”(2013 Ravens Rock Rally-Jonathan O'Callaghan&Gavin Sheehan-Stage 3),我会得到错误 错误:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“Callaghan&Gavin Sheehan-Stage 3”附近使用的正确语法 任何帮助都会很好,提前谢谢 这是我的密码:Php 错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解使用near';,php,mysql,sql,syntax-error,Php,Mysql,Sql,Syntax Error,当用户输入youtube url并从url获取youtube id时,将使用下面的代码。然后,它获取具有该id的视频的标题。然后将该标题插入数据库并调用以显示与该id关联的视频图像 如果我使用此youtube url或其他youtube url。如果youtube url的标题包含一个“ie”(2013 Ravens Rock Rally-Jonathan O'Callaghan&Gavin Sheehan-Stage 3),我会得到错误 错误:您的SQL语法有错误;检查与MySQL服务器版本对
<?php
include 'dataconnection.php';
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
$url = $_POST['set_video'];
parse_str( parse_url( $url, PHP_URL_QUERY ), $my_array_of_vars );
$youtube_id = $my_array_of_vars['v'];
$info = $_POST['set_desc'];
$id = $my_array_of_vars['v'];
$xmlData = simplexml_load_string(file_get_contents("http://gdata.youtube.com/feeds/api/videos/{$id}?fields=title"));
$title = (string)$xmlData->title;
$sql="INSERT INTO videodetails SET id='null',youtube_id='$youtube_id',info='$title'";
if (!mysqli_query($connection,$sql))
{
die('Error: ' . mysqli_error($connection));
}
echo "<div id='pageheader'>
1 record added<span id='logout'>Return to <a href='contributors_login.html'>Contributors Login</a></span>
</div>";
echo '<div id="setvideo"><a href="http://www.youtube.com/watch?v='.$my_array_of_vars['v'].'" target="_blank"><img src="http://i4.ytimg.com/vi/'.$my_array_of_vars['v'].'/default.jpg" style="border:solid 2px white;"></a><p>'.$title.'</p></div>';
mysqli_close($connection);
?>
您的插入查询不是有效的sql。关键字“set”用于更新查询。插入查询如下所示:
insert into atable
(f1, f2, etc)
values
(val1, val2, etc)
还是这个
insert into atable
(f1, f2, etc)
select val1, val2, etc
from someOtherTables
yourTube名称中有一个引号,因此SQL行
$sql="INSERT INTO videodetails SET id='null',youtube_id='$youtube_id',info='$title'
变成这样
INSERT INTO videodetails SET id='null',
youtube_id='2013 Ravens Rock Rally - Jonathan O'Callaghan & Gavin Sheehan - Stage 3'
MySQL将其视为
INSERT INTO videodetails SET id='null',
youtube_id='2013 Ravens Rock Rally - Jonathan O',Callaghan & Gavin Sheehan - Stage 3'
MySQL不理解在您的插入到…
部分中使用的Callaghan&Gavin Sheehan-Stage 3'
你打开单引号。但是标题也包含单引号,所以它们会被关闭。MySQL不知道这一点,认为下面的文本是MySQL关键字。字符串包含引号的情况就是为什么存在mysqli\u real\u escape\u string(),以查找这些引号,并在它们前面插入一个\
,使它们作为文字引号字符,而不是终止带引号的字符串
. . .
$youtube_id = mysqli_real_escape_string($my_array_of_vars['v']);
$info = mysqli_real_escape_string($connection, $_POST['set_desc']);
$sql="INSERT INTO videodetails SET id='null',youtube_id='$youtube_id',info='$title'";
if (!mysqli_query($connection,$sql))
. . .
但是最好的做法是使用查询参数,所以您不必担心那些嵌入的引号。在SQL字符串中有变量代替文字值的任何位置,都可以使用查询参数占位符。这些占位符不能代替表名、列名、SQL表达式或关键字——它们只能在通常将单个标量值放入SQL的地方工作
$sql="INSERT INTO videodetails SET id='null',youtube_id=?,info=?";
if ($stmt = mysqli_prepare($connection, $sql)) {
mysqli_stmt_bind_param($stmt, 'ss', $youtube_id, $title);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
这更安全,并且使您的SQL更具可读性。请注意,?
占位符本身不在引号内,即使绑定到它的值是字符串
PS:我怀疑您是否使用带引号的字符串'null'
,这里您可能指的是SQL关键字null
您需要进行一些转义。您可能会发现查看$SQL变量的内容很有帮助。@Alan,别忘了接受(勾选)您认为最有用的答案。也可以随意+1任何你喜欢的答案,这是奖励答案的好方法!它不是标准的SQL,但MySQL支持它。INSERT。。。SET
是有效的mysql语法。参见第二个例子Upvoted-我不知道MySQL支持这一点,但是,这里没有理由不使用标准SQL。更大的问题是OP的值中有未替换的单引号-。。。Jonathan O'Callaghan…
因此,即使他们更改了语法,查询仍然会失败。因为OP使用的是mysqli.*
notmysql.*
最好是这样写$sql=sprintf(“插入到视频详细信息集id='null',youtube\u id='youtube\u id',info='s',mysql\u real\u escape\u string($title))$sql=“INSERT-INTO-videodetails SET id='null',youtube\u id=”.mysqli\u real\u escape\u string($youtube\u id)。”,info=”.mysqli\u real\u escape\u string($title)。“代码>另外,SET
对于INSERT
语句来说是无效的语法。编辑:eek,显然MySQL支持它!“我得吃我的帽子了。”@halfer,对了,MySQL支持INSERT
语句中的SET
,即使这不是标准的SQL,也不一定适用于其他品牌的RDBMS。查阅