2017-04-12 5 views
-4

WebホストのPHPが最近更新されました。これで古いMySQLクエリで「廃止予定」というエラーメッセージが表示されます。 mysql_queryコードをPDOに変換する必要があります。ここから私が始めていることは次のとおりです。PDOエラー:キャラクタセットを初期化できませんutf8_general_ci

<? 

    $con = mysql_connect("localhost", "username", "password"); 
    if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("database_name", $con); 

     $result = mysql_query("select * from event_calendar where event_year >= '2017' order by event_datenumber asc") 
     or die(mysql_error()); 

    while($row = mysql_fetch_array($result)) { 

       $event_date = $row['event_date']; 
       $event_month = $row['event_month']; 
       $event_monthname = $row['event_monthname']; 
       $event_year = $row['event_year']; 
       $event_datenumber = $row['event_datenumber']; 
       $event_starttime = $row['event_starttime']; 
       $event_location = $row['event_location']; 
       $event_city = $row['event_city']; 
       $event_state = $row['event_state']; 
       $event_directions = $row['event_directions']; 

    $testmonth = date("F"); 
    $testmonth2 = date("m"); 
    $testdate = date("d"); 
    $testyear = date("Y"); 
    $testdatenumber = $testyear.$testmonth2.$testdate; 

    ?> 

    <? 

    if ($testdatenumber <= $event_datenumber){ 

    ?> 

    <p> 
    <b><? echo $event_monthname.' '.$event_date ?></b> - <? echo $event_starttime ?><br> 
    <? echo $event_location ?><br> 
    <? echo $event_city ?>, <? echo $event_state ?><br> 
    <a href="<? echo $event_directions ?>" target="_blank"><b>Directions</b></a> 
    </p> 

    <? } else {} ?> 

<? } ?> 

私は全く新しいので、どこから始めるべきか分かりません。また、今日は「No database selected」とも言われています。

私はラインでPDOラインにこの自分自身を書き換えるatemptingてきたし、これまでのところ、私は取得しています:以下のように上記のエラーで参照

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2019] Can't initialize character set utf8_general_ci (path: /usr/share/mysql/charsets/)' in /my_file_location/test-this.php:21 Stack trace: #0 /my_file_location/test-this.php(21): PDO->__construct('mysql:host=localhost', 'username', 'password') #1 {main} thrown in /my_file_location/test-this.php on line 21

マイライン21は、次のとおりです。

$db = new PDO('mysql:host=localhost;dbname=database_name;charset=utf8_‌​general_ci', 'username', 'password'); 

私は今ちょうどUTF8にutf8_general_ciを変更し、現在は次のようなメッセージを持っていました:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000] [1044] Access denied for user 'username'@'localhost' to database 'database_name'' in /my_file_location/test-this.php:21 Stack trace: #0 /my_file_location/test-this.php(21): PDO->__construct('mysql:host=localhost', 'username', 'password') #1 {main} thrown in /my_file_location/test-this.php on line 21

M私はWebホストがWindowsオペレーティングシステムを使用していると私は信じていて、アップグレードされたばかりのPHPバージョンは5.6.30ですが、mySQLデータベースについては何も知りません。

更新:OK、2,3日後に読んで、ぶつけて、私は書き直しを思いついた。私は今、次の作業があります。

<?php 
    $db = new PDO('mysql:host=localhost;dbname=database_name;charset=utf8mb4', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, 
                           PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 

    foreach($db->query('SELECT * FROM event_calendar WHERE event_year >= 2017 ORDER BY event_datenumber ASC') as $row) { 

    $testmonth = date("F"); 
    $testmonth2 = date("m"); 
    $testdate = date("d"); 
    $testyear = date("Y"); 
    $testdatenumber = $testyear.$testmonth2.$testdate; 

if ($testdatenumber <= $row['event_datenumber']) { 

    echo "<p>"; 
    echo "<u><h4>".$row['event_monthname']." ".$row['event_date'].", ".$row['event_year']."</h4></u>"; 
    echo "<b>What:</b> ".$row['event_title']."<br/>"; 
    echo "<b>Where:</b> ".$row['event_location']." - ".$row['event_address1'].", ".$row['event_city'].", ".$row['event_state']." ".$row['event_zip']."<br/>"; 
    echo "<b>When:</b> ".$row['event_starttime']."<br/>"; 
    echo "<b>When:</b> <a href='".$row['event_directions']."' target='_blank'><b>Click here</b></a>"; 
    echo "</p>"; 

    } else {} 

    } 

?> 

今、私はちょうど私が基準を満たす唯一の最初の3行に結果を制限する方法を見つけ出すことができることを望みます。私はこれまでにいくつかのことを試しましたが、まだ成功していません。私はそれが動作するものを見つけるまでそれは読書とテストに戻っていると思います。

+3

pdoについてインターネット上でチュートリアルを読む方法は、あなたの古いコードをここでstackoverflowにダンプするだけではなく、誰かがまっすぐあなたのためにそれを変換することを期待しています。どうすればpdoを習得しますか?あなたは間違った場所にいるはずです。 – Ghost

+3

このリンク[MySQL ExtensionからPDOへの移行](https://www.sitepoint.com/migrate-from-the-mysql-extension-to-pdo /)おそらくあなたを助ける –

+0

情報のためのリンクを提供するのに十分な少なくとも親切であるために、Yu Jiaao、ありがとう、とても有難い。 – Blackhatter1

答えて

0

更新:数日後に読書したり、ぶつけたりして、私は書き直しができました。私は今、次の作業があります。

<?php 
    $db = new PDO('mysql:host=localhost;dbname=database_name;charset=utf8mb4', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, 
                           PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 

    foreach($db->query('SELECT * FROM event_calendar WHERE event_year >= 2017 ORDER BY event_datenumber ASC') as $row) { 

    $testmonth = date("F"); 
    $testmonth2 = date("m"); 
    $testdate = date("d"); 
    $testyear = date("Y"); 
    $testdatenumber = $testyear.$testmonth2.$testdate; 

if ($testdatenumber <= $row['event_datenumber']) { 

    echo "<p>"; 
    echo "<u><h4>".$row['event_monthname']." ".$row['event_date'].", ".$row['event_year']."</h4></u>"; 
    echo "<b>What:</b> ".$row['event_title']."<br/>"; 
    echo "<b>Where:</b> ".$row['event_location']." - ".$row['event_address1'].", ".$row['event_city'].", ".$row['event_state']." ".$row['event_zip']."<br/>"; 
    echo "<b>When:</b> ".$row['event_starttime']."<br/>"; 
    echo "<b>When:</b> <a href='".$row['event_directions']."' target='_blank'><b>Click here</b></a>"; 
    echo "</p>"; 

    } else {} 

    } 

?> 

今、私はちょうど私が基準を満たす唯一の最初の3行に結果を制限する方法を見つけ出すことができることを望みます。私はこれまでにいくつかのことを試しましたが、まだ成功していません。私はそれが動作するものを見つけるまでそれは読書とテストに戻っていると思います。

-1

正しいの解決方法は、ライブサイトでのエラーの表示を無効にすることです。あなた決しては、ユーザーにその情報を公開するので、これは、とにかく実行する必要があります:あなたはそこにエラーを見たいと

ini_set('display_errors', false); 

は、あなたの非ライブ(テスト)のサイト上でこれをしないでください。

このサイトを現在のサイトに配置すると、この古いデータベース拡張から移行する作業は、それほど緊急性が低くなります。私の推測によれば、あなたはまだPHP 5.6を使用していますが、それでもまだmysql_の機能をサポートしていますが、まだ削除されている7.xの準備をする必要があります。

+0

情報ありがとうございます。はい、PHP5.630と表示されます – Blackhatter1

0

エラーメッセージはクリアです。そのような文字セットはありません。そして決してあったことはありません。

utf8_general_ci

は、適切な文字セット名がちょうど utf8

私はあなたにお勧めしてみましょうであるのに対し、照合である私のこのような混乱の多くを避けるのに役立ちますPDO tutorial

+0

ありがとうございます。私はutf8に変更を加え、今ではアクセス拒否メッセージを受け取ります。私はあなたのチュートリアルをチェックします。リンクありがとう。 – Blackhatter1

関連する問題