I wrote a simple AJAX request that performs a random select in two MySQL tables. My current script involves connecting to the database and creating a new PDO every time the #generate button is clicked.
Can it be considered a bad practice? Could it lead to performance issues? If not, how could it still be optimized?
PHP (generator.php)
$host = "localhost";
$dbname = "generator";
$user = "root";
$password = "";
$utf8 = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
try {
$database = new PDO("mysql:host=$host; dbname=$dbname", $user, $password, $utf8);
$database->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(PDOException $e) {
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
die();
}
$query = "SELECT * FROM (
(SELECT * FROM homemade WHERE validation = 1 ORDER BY RAND() LIMIT 0,1)
UNION ALL
(SELECT * FROM user_generated WHERE validation = 1 ORDER BY RAND() LIMIT 0,1)
)
AS foo
ORDER BY RAND()
LIMIT 0,1";
$statement = $database->prepare($query);
$statement->execute();
$content = $statement->fetch();
$data = array();
if($query) {
$data["pickedName"] = $content["name"];
$data["pickedBaseline"] = $content["baseline"];
}
echo json_encode($data);
JS
var $name = $("#content h2");
var $baseline = $("#content h3")
$("#generate").click(function() {
$.ajax({
type: "POST",
url: "generator.php",
dataType: "json"
}).done(function(data) {
$name.text(data.pickedName);
$baseline.text(data.pickedBaseline);
}).fail(function(data) {
$name.text("Something went wrong !");
$baseline.text("Please try again.");
});
});