我的虛擬主機上的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 {} ?>
<? } ?>
我完全是新來的,不知道從哪裏開始。我也注意到,今天它現在說「沒有選擇數據庫」。
我已經atempting一行在PDO行重寫這個自己到目前爲止我得到:
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_general_ci只是UTF8,現在有以下消息:
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
中號y Web主機使用Windows操作系統,我相信,它剛剛升級到5.6.30的PHP版本,但我不知道mySQL數據庫。
更新:好的,經過幾天的閱讀和探索,我設法想出了一個工作重寫。我現在有以下工作:
<?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 {}
}
?>
現在我只希望我能弄清楚如何結果限制爲僅符合條件的前三排。到目前爲止,我嘗試了幾件事,但尚未成功。我想這是回到閱讀和測試,直到我找到有用的東西。
開始的方式是在互聯網上閱讀有關pdo的教程,您不只是將您的舊代碼轉儲到stackoverflow上,並期望有人直接將其轉換爲您,您將如何學習pdo if你不會自己啓動它,你顯然在錯誤的地方 – Ghost
此鏈接[從MySQL擴展遷移到PDO](https://www.sitepoint.com/migrate-from-the-mysql-extension-to-pdo /)也許可以幫到你 –
謝謝Yu Jiaao,至少對於提供鏈接信息來說足夠友善。非常感激。 – Blackhatter1