2

コンピューターにローカルにある音楽のオンラインデータベースを作成しようとしています。ライブラリにすべての曲のテーブルがすでにあり、プレイリストの1つとして機能する曲ID(メインテーブルに曲を追加したときに自動インクリメント)だけで別のテーブルを作成したいと思います。

私の知る限り、曲を照合するための100%認定可能な方法は、ディスク上の場所(C:\ Users \ username \ Music \ iTunes \ iTunes Media \ Music \JonathanCoultonおよびGLaDOS\Portal \ 128 128 Still)のみです。例としてAliveDuet.mp3)。私のPHPコードでは、曲の場所を変数に入れ、MYSqlテーブルの同等の曲の場所を基準にして出力すると、正確に一致しますが、それを使用してselectステートメントを実行しようとすると、エラーが発生します。私が知る限り、これは位置情報のバックスラッシュが原因であることがわかります。

これは私が使用しているselectステートメントです。

SELECT id FROM itunes WHERE Location=$locationval

ここで、$ locationvalは現在の曲の場所、idはメインテーブルの自動インクリメントされたID、itunesはメインテーブルです。

これを回避する方法はありますか?そして、私は初心者なので、バックスラッシュは本当に問題ですか?

参考までに、プレイリストをインポートするための完全なコードを示します。これは、PEAR(PHP拡張機能)用のDBプラグインを使用しています。

<?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 に答える