zufällige Zeile aus der benutzerdefinierten Tabelle erhalten

Ich habe benutzerdefinierte Tabelle, wo ich Zitate und Autor speichern

function quote_install(){ global $wpdb; global $quote_db_version; $table_name = $wpdb->prefix . 'quote'; // create sql your table $sql = "CREATE TABLE " . $table_name . " ( ID int(11) NOT NULL AUTO_INCREMENT, time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, quote text NOT NULL, author text NOT NULL, qtag ENUM('G', 'W', 'Z', 'H', 'M') NOT NULL default 'G', PRIMARY KEY (ID) );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } 

dann möchte ich eine Zeile mit Zitat und Autor anzeigen lassen.

 function read_single_Quote( $id=NULL ) { global $wpdb; $table_name = $wpdb->prefix . 'quotes'; // random select if($id ==NULL){ $sql = $wpdb->prepare( " SELECT * FROM {$wpdb->prefix}'quotes' ORDER BY RAND() LIMIT 1 "); } //get the row id = $id else { $sql = $wpdb->prepare( " SELECT * FROM {$wpdb->prefix}'quotes' WHERE ID = %d LIMIT 1 ", $id ); } $result = $wpdb->get_results( $sql ); // databse error, return false if ( ! $result ) { return false; } // return first result return $result[0]; 

}

Was ist falsch? Was ist der effizienteste Weg, eine zufällige Zeile aus einer benutzerdefinierten Tabelle zu erhalten?

Solutions Collecting From Web of "zufällige Zeile aus der benutzerdefinierten Tabelle erhalten"

[Anmerkung: @ marwyk87 hat seine Antwort geschrieben, während ich dies verfasste, was eine andere Möglichkeit darstellt, das Problem zu beheben]

Sie haben einen einfachen Syntaxerrors in Ihrem SQL, weil Sie auf den Tabellennamen verweisen. Du solltest es einfach sagen

 $sql = $wpdb->prepare( " SELECT * FROM {$wpdb->prefix}quotes ORDER BY RAND() LIMIT 1 "); 

und

 $sql = $wpdb->prepare( " SELECT * FROM {$wpdb->prefix}quotes WHERE ID = %d LIMIT 1 ", $id ); 

Ich denke, dass Sie ein Syntaxproblem in Ihrem TSQL haben könnten. Wenn du es tust

 $table_name = $wpdb->prefix . 'quotes'; 

dann kannst du haben

 $sql = $wpdb->prepare( " SELECT * FROM ".$table_name." ORDER BY RAND() LIMIT 1 ");