2

我正在尝试为我本地计算机上的音乐创建一个在线数据库。我的库中已经有一个包含每首歌曲的表,并且想创建一个不同的表,其中仅包含作为我的播放列表之一的歌曲 ID(当我将歌曲添加到我的主表时自动递增)。

据我所知,匹配歌曲的唯一 100% 可认证方法是通过我磁盘上的位置( C:\Users\username\Music\iTunes\iTunes Media\Music\Jonathan Coulton 和 GLaDOS\Portal\128 128 Still Alive Duet.mp3 ) 为例。在我的 PHP 代码中,我将歌曲位置放入一个变量中,如果我相对于我的 MYSql 表中的等效歌曲位置打印它,它们完全匹配,但是当我尝试使用它运行 select 语句时,它给了我一个错误。据我所知,这是由位置信息中的反斜杠引起的。

这是我正在使用的选择语句,

SELECT id FROM itunes WHERE Location=$locationval

其中 $locationval 是当前歌曲的位置,id 是我的主表中自动递增的 id,iTunes 是我的主表。

有没有办法解决?由于我是初学者,反斜杠真的是问题吗?

这里的参考是导入播放列表的完整代码,它使用 PEAR 的 DB 插件(一个 PHP 扩展)。

<?php

// define table name
define('TABLE_NAME', 'playlist');

// create database connection
require_once('DB.php');
$dsn = 'mysql://username:password@localhost/itunes';
$DB =& DB::connect($dsn);
if (DB::isError($DB)) {
  die($DB->getMessage());
}
$DB->setFetchMode(DB_FETCHMODE_ASSOC);

// load text file
$file = file_get_contents('Portal.txt');

// explode on new line
$file = explode("\r", $file);
set_time_limit(0);


// loop through each line in the file
foreach ($file as $key => $value) {

  // explode on tab to get column list
  $exploded = explode("\t", $value);

  // check for first row, which contains column headers
  if ($key == 0) {

 }
   else{

    if(count($exploded)>3)
    {
    $locationval=$exploded[26];
  echo $exploded[26];
  echo "<br />";
  $result = mysql_query("SELECT id FROM itunes WHERE Location=$locationval");
  //$result = mysql_query("SELECT * FROM itunes WHERE id=8292");
set_time_limit(0);
$row = mysql_fetch_row($result);
  //test statements to see if the query worked
  echo "Test: ";
  echo $row['id'];
  echo $row['Location'];    
  echo "<br />";

  }
  }

}
?>

这是从这里的代码修改的:http: //ericlondon.com/posts/208-exporting-itunes-data-into-mysql-and-creating-sql-to-show-top-rated-albums

如果需要更多信息,请告诉我。

4

1 回答 1

1

在 mysql 中将反斜杠用作字符串文字时,您需要转义反斜杠,因此只需替换以下行:

$result = mysql_query("SELECT id FROM itunes WHERE Location=$locationval");

对于这个:

$result = mysql_query("SELECT id FROM itunes WHERE Location='". str_replace('\\','\\\\',$locationval) . "'");

那应该做你想做的事。

于 2012-11-12T16:54:31.697 回答