简体   繁体   中英

Querying database with php

I am trying to query my database using php, to then display the results of the query. For this example, I only want the number of elements in my MySQL database.

My code is:

<?php
    print("This is just a test");
    print("This is another test");
    // Create connection
    $con=mysqli_connect("mysql.netsons.com","****","****","****");

    // Check connection
    if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    print("A third test");

    $result = mysqli_query($con, "SELECT COUNT(*) FROM MyGames");
    echo $result;
    echo mysqli_fetch_array($result);
    print("A forth test");
    mysqli_close($con);
?>

This is the result:

This is just a testThis is another testA third test

What am I doing wrong?

mysql_fetch_array fetches ... an array.

$row = mysqli_fetch_array($result);
echo $row["COUNT(*)"];

I think it would be better to alias that column too:

SELECT COUNT(*) AS count FROM MyGames
...
echo $row['count'];

I would recomend using a diferent method of querying that is much safer(As far as I know there is no SQL Injection to worry about) and it saves a lot of time and space.

First you need to create an mysqli object

$stateConnect = new mysqli("localhost", "root", "PASS", "DBTable");

This does the same thing as mysqli_connect and mysqli_select_db
Then you want to define your SQL query

$sql = "SELECT `userVotes` FROM `users` WHERE `userEmail`=?";

Next you want to create a variable called a statement with your SQL "attached to it"

$statement = $stateConnect->prepare($sql);

Notice how in my SQL I didn't directly put the value required for userEmail, instead I put an '?'. This acts as a variable that we will later define(However it will always be a '?'
To define this variable we need to use.

$statement->bind_param('s', $SESSION['email']);

This binds $SESSION['email'] to the first qustion mark, the s is saying that the first question mark will be a string. Lets say we had to varribles:

$sql = "SELECT `userVotes` FROM `users` WHERE `userEmail`=? AND `userName`=?";

We would then use:

$statement->bind_param('ss', $SESSION['email'], "USERNAME");

Each s replresents a question mark and each value after that represents a question mark.
Now we have to execute our query with.

$statement->execute();

If we are expecting a result to be returned then we have to use

$statement->bind_result($userVotesText);

To bind the results to a variable, If I was expecting to columns of results I would need to put a second variable in.
Now to set those varribles we need to use

if($statement->fetch()){
    $userVotesResult = userVotesText;
}

This method is much better than other for querying databases and is called Prepared Statement

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM