Προς το περιεχόμενο

Πρόβλημα με εκτέλεση ερωτήματος sql


suomilk

Προτεινόμενες αναρτήσεις

Δημοσ.

Εκτελώ το παρακάτω ερώτημα SQL στην mySQL

>CREATE DATABASE `news` DEFAULT CHARACTER SET greek COLLATE greek_general_ci; 

CREATE TABLE `news`.`feed` (
`title` VARCHAR( 255 ) NOT NULL,
`description` VARCHAR( 255 )   NOT NULL,
`link` VARCHAR( 100 )  NOT NULL,
`channel` VARCHAR( 50 )  NOT NULL,
`pubDate` DATETIME  NOT NULL
)ENGINE=MyISAM DEFAULT CHARSET=greek COLLATE=greek_general_ci DEFAULT CHARSET=greek; 

 

και στη συνέχεια εκτελώ το παρακάτω script για να ενημερώσω τη βάση μου από rss.

 

><?php
$ch = curl_init('http://****.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$rss = new SimpleXMLElement(curl_exec($ch));

// fill these next two rows in!
$dbLink = mysql_connect('localhost', '***', '****');
mysql_select_db('news', $dbLink);

foreach($rss->channel->item as $node) {
$title = mysql_real_escape_string($node->title);
$desc = mysql_real_escape_string($node->description);
$link = mysql_real_escape_string($node->link);
$channel = mysql_real_escape_string($rss->channel->link);
$pubDate = date("Y-m-d H:i:s", strtotime($node->pubDate));

$query = "REPLACE INTO feed (title,description,link,channel,pubDate)
VALUES ('{$title}', '{$desc}', '{$link}', '{$channel}', '{$pubDate}')";
if(!mysql_query($query, $dbLink)) {
echo "an error has occured - ".mysql_error()."n";
exit();
}
}

 

Το αποτέλεσμα του παραπάνω script μου αποθηκεύει τα περιεχόμενα των tags σωστά αλλά μου εμφανίζει ερωτηματικά στα ελληνικά.

 

Δοκίμασα και με unicode αλλά τίποτα.

 

Και κάτι ακόμη, Επειδή το php script θα εκτελείται ανά τακτά διαστήματα, υπάρχει δυνατότητα με την κατάλληλη μετατροπή να ενημερώνω τη βάση μόνο με καινούργιες εγγραφές γιατί αλλιώς δημιουργούνται διπλότυπα.

Δημοσ.

Δοκίμασε μετά το mysql_select_db

 

mysql_query('set character set greek',$dbLink );

mysql_query("SET NAMES 'greek'",$dbLink );

 

(ή utf-8) μπας και κάτσει τίποτα :)

Δημοσ.
Δοκίμασε μετά το mysql_select_db

 

mysql_query('set character set greek',$dbLink );

mysql_query("SET NAMES 'greek'",$dbLink );

 

(ή utf-8) μπας και κάτσει τίποτα :)

 

Τα δοκίμασα και αυτά πάλι δε μου κάθεται. :confused:

Θα το δω αύριο γιατί κομματιάστηκα.

Ευχαριστώ πολύ

 

Αν έχει κάποιος άλλη ιδέα ευπρόσδεκτη

Δημοσ.

Για τη δημιουργία της database και των πινάκων χρησιμοποιήσε τα

CHARACTER SET utf8

COLLATE utf8_general_ci

αντί για τα αντίστοιχα greek.

 

Αποθήκευσε το php αρχείο σου σαν utf8.

Αν παίρνεις data από html φόρμα στο <head> βάλε κ αυτό.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> (και αυτό το αρχείο αποθηκευμένο σαν utf8)

 

Λογικά θα σου τρέξει χωρίς προβλήματα. Με αυτό το config σε .net web application ποτέ δεν είχα πρόβλημα με ελληνικά.

 

Η γενική ιδέα είναι ότι παντού θα πρέπει να υπάρχει το ίδιο encoding και αν δεν γίνεται, να υπάρχει πάντα η σωστή μετατροπή. Το utf8 είναι μία πολύ καλή επιλογή διότι στην ίδια database μπορείς να αποθηκεύσεις κείμενα από όλες τις γλώσσες κ είσαι οκ.

Δημοσ.

Τελικά διορθώθηκε βάζοντας την παρακάτω γραμμή πριν το query

 

> mysql_query("SET NAMES 'utf8'"); 

 

Ευχαριστώ πολύ!

 

Επειδή το script θα εκτελείται ανά τακτά διαστήματα, υπάρχει δυνατότητα με την κατάλληλη μετατροπή να ενημερώνω τη βάση μόνο με καινούργιες εγγραφές γιατί αλλιώς δημιουργούνται διπλότυπα.

Δημοσ.

Αν θες η βαση σου να εχει υγεια αλλαξε και τους κωδικους που μας εδειξες..

 

Μη την βρεις διεγραμενη και ψαχνεσαι..

 

$dbLink = mysql_connect('localhost', '*******', '*******');

Δημοσ.
Αν θες η βαση σου να εχει υγεια αλλαξε και τους κωδικους που μας εδειξες..

 

Μη την βρεις διεγραμενη και ψαχνεσαι..

 

$dbLink = mysql_connect('localhost', '*******', '*******');

 

Γιατί υπήρχε περίπτωση να έβαζα αυτούς τους κωδικούς.

Πρόκειται για εργασία για πανεπιστήμιο

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...