2009-03-09 9 views
1

私はPHPを使用してウェブサイトを作成していますが、SQLクエリーに問題があります。ページが空白になる原因となるSQLクエリー

これはコードである必要がありますが、ページが空白になる(つまりすべてが白く表示されます)。私はダブルチェックして、web_idは間違いなく正しい名前と正しい場合です。

たとえば、 'foo'(基本的にはweb_id以外のもの)のクエリをweb_idに変更すると、ページが表示されますが、 'where句'の 'Unknown column' foo ' "

これを引き起こしている可能性がある人はいますか?ここで私は、テーブルのテストを作成するコードです:

$dataDB = "CREATE TABLE test 
(
    data_id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(data_id), 
    web_id INT, 
    kfoo TEXT, 
    vbar TEXT 
)"; 

mysql_query($dataDB,$con); 

更新

ここでの回答の一部に基づいて、私は$ websiteID周りからの引用符を削除し、

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
を使用してエラーを表示します

これは、私が今修正した構文エラーを含む多くのエラーを表示しました。しかし、多くのエラーが残っており、私にはあまり意味がありません。ここに私のメソッドの完全なコードは次のとおりです。私は取得しています

function getOutputSQL($websiteID,$userInput) { 
$result = mysql_query("SELECT * FROM websites WHERE websiteID=$websiteID") 
    or die(mysql_error()); 

    while ($row = mysql_fetch_array($result)){ 
    $url = $row['url']; 
    $exp = $row['exp']; 
    $output= $row['textPrint']; 
    $endUrlStart = $row['outUrlStart']; 
    $endUrlEnd = $row['outURLEnd']; 

    $image = $row['image']; 
    $print = $row['print']; 
    $post = $row['post']; 

    $dataSource = $row['dataSource']; 
    $dataSourceName = $row['dataSourceName'];   

    } 

    // construct array of data names and values 
    $dataArray = array(); 
    $result = mysql_query("SELECT * FROM test WHERE web_id=$websiteID") 
    or die(mysql_error()); 

    while ($row = mysql_fetch_array($result)) { 
    $k = $row['kfoo']; 
    $v = $row['vbar']; 
    $dataArray[$k] = $v; 
    } 

    // construct array of expressions and replacements 
    $result = mysql_query("SELECT * FROM regex WHERE web_id=$websiteID"); 
    $expArray = array(); 

    while ($row = mysql_fetch_array($result)) { 
    $e = $row['ex']; 
    $r = $row['re']; 
    $expArray[$e] = $r; 
    } 

    return getOutput($userInput,$url,$exp,$output,$endUrlStart, 
    $endUrlEnd,$dataSource,$dataSourceName,$post,$image,$print, 
    $expArray,$dataArray); 
} 

エラーはすべてこのようなものです -

注意:未定義の変数:/home/daniel/web/resultsTest.php上で出力URLに対して数回繰り返し、ライン113"

、EXP、出力、endUrlStart、endUrlEnd、データソース、datasourcenameに、ポスト、画像とプリントライン113は、大きなリターンラインです。

問題は、これらの変数が定義されている限り、別のページに表示できるので、テーブルが空でないことがわかります。

はソート

を解決しました。問題は実際に私のコードの別の部分にありました - 私はgetOutputSQLを間違って呼び出していましたが、今修正しました!

答えて

2

一般に、PHPの空白のページは無効になっています。error notifications。まず、.htaccessまたはphp.iniで有効にする必要があります。

私の知る限り、整数はSQLで引用するべきではありません。

+0

クォート整数は害を与えません。 – Tomalak

2

あなたの実際のコードが実際に何かを出すことを期待しています。これがすべてのコードであれば何も出力されません。エラーがない場合(エコーやプリントはテンプレートではありません)

また、error_reportingとdisplay_errorsの両方が設定されていることを確認してください。スクリプトの先頭からこれを行うことができます

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

これですべてのエラーが表示されます。

EDIT
PHPは致命的なエラー、警告や通知などのエラーの複数の種類があります。通知は、未定義の変数や廃止予定の関数を使用している場合には、ほとんど無視することができます。

error_reporting(E_ALL^E_NOTICE); 

次に、実際のエラー(警告と致命的なエラー)のみが表示されます。

より編集
次に、これらの変数が真に設定を解除しているあなたはgetOutput()を呼び出す前に、このような何かを試してみてください。

echo "<pre>"; 
var_dump($userInput); 
var_dump($url); 
//etc. 
echo "</pre>"; 

と変数が実際に設定されているかどうかを確認します。

+0

これはエラーの負荷を露呈しますが、どれも私にとっては意味がありません。私は新しい問題で質問を更新しました。 – Daniel

+0

私がNoticesをあなたが提案する方法を抑制すると、私は単に空白のページを取得します。 – Daniel

+0

変数が設定されましたが、問題を発見しました。これはgetOutputSQLの呼び出し方法と関係していました。 – Daniel

1

代わりにこれを試してみてください:

$dataArray = array(); 
if(is_numeric($websiteID){ 
     $result = mysql_query("SELECT * FROM test WHERE web_id=$websiteID") or die(mysql_error()); 

     while ($row = mysql_fetch_array($result)) { 
       $k = $row['kfoo']; 
       $v = $row['vbar']; 
       $dataArray[$k] = $v; 
     } 
} 

通知は私が '' websiteID変数の周りに削除。これは、mysqlがそれを文字列として扱うのではなく、mysqlテーブルの作成で指定したintとして扱うことを意味します。私はまた、websiteIDが数字であるかどうかをチェックします。そうでない場合は、結果が0になるため、SQLクエリを実行する際のポイントはありません。これはSQLインジェクションを防ぎます。

0

ループ内で定義する変数は、ループの最後に破棄されます。つまり、最初のwhileループで作成した出力変数は、ループの後に存在しません。 whileループの外側でそれらを定義し、ループ内の値を設定する必要があります。

function getOutputSQL($websiteID,$userInput) { 
$result = mysql_query("SELECT * FROM websites WHERE websiteID=$websiteID") 
    or die(mysql_error()); 
    $url = ""; 
    $exp = ""; 
    $output = ""; 
    //... etc for all the other variables you need in the function at the end. 
    while ($row = mysql_fetch_array($result)){ 
    $url = $row['url']; 
    $exp = $row['exp']; 
    $output= $row['textPrint']; 
    $endUrlStart = $row['outUrlStart']; 
    $endUrlEnd = $row['outURLEnd']; 

    $image = $row['image']; 
    $print = $row['print']; 
    $post = $row['post']; 

    $dataSource = $row['dataSource']; 
    $dataSourceName = $row['dataSourceName'];     

    } 
    // the rest of your function... 
+0

私はこれを試して、ページが再び空白になった。奇妙なことが起こっている。 – Daniel

関連する問題