7

I know that this code works on another site I've got but it's not playing ball today. I get three warnings:

Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given in /homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php on line 33

Warning: mysqli_execute() expects parameter 1 to be mysqli_stmt, boolean given in /homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php on line 34

Warning: mysqli_stmt_affected_rows() expects parameter 1 to be mysqli_stmt, boolean given in /homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php on line 35

Can someone help me figure this out?

I am having to use htaccess to upgrade to PHP5 if this helps.

$connection = mysqli_connect($hostname, $username, $password, $dbname);

if (!$connection) {
    die('Connect Error: ' . mysqli_connect_error());
}

$query = "INSERT INTO entries (name, dob, school, postcode, date) VALUES (?,?,?,?,?)";
$stmt1 = mysqli_prepare($connection, $query);
mysqli_stmt_bind_param($stmt1, 'sssss',$name,$dob,$school,$postcode,$date);
mysqli_execute($stmt1);
if(mysqli_stmt_affected_rows($stmt1) != 1)
    die("issues");
mysqli_stmt_close($stmt1);
return "new";

EDIT

After some investigation it transpires that the prepare statement doesn't play ball with mysql4. I have created a new mysql5 database but I now get this error when I try to connect:

Warning: mysqli_connect() [function.mysqli-connect]: (HY000/2005): Unknown MySQL server host 'localhost:/tmp/mysql5.sock' (1)

Does anyone have any idea as to why this is happening?

Community
  • 1
  • 1
Drew
  • 3,194
  • 8
  • 40
  • 62

2 Answers2

10

Add more error handling.
When the connection fails, mysqli_connect_error() can tell you more details.
When preparing the statement fails mysqli_error() has more infos about the error.
When executing the statement fails, ask mysqli_stmt_error(). And so on and on...
Any time a function/method of the mysqli module returns false to indicate an error, a) handle that error and b) decide whether it makes sense or not to continue. E.g. it doesn't make sense to continue with database operations when the connection failed. But it may make sense to continue inserting data when just one insertion failed (may make sense, may not).

For testing you can use something like this:

$connection = mysqli_connect(...);
if ( !$connection ) {
  die( 'connect error: '.mysqli_connect_error() );
}

$query = "INSERT INTO entries (name, dob, school, postcode, date) VALUES (?,?,?,?,?)";
$stmt1 = mysqli_prepare($connection, $query);
if ( !$stmt1 ) {
  die('mysqli error: '.mysqli_error($connection);
}
mysqli_stmt_bind_param($stmt1, 'sssss',$name,$dob,$school,$postcode,$date);
if ( !mysqli_execute($stmt1) ) {
  die( 'stmt error: '.mysqli_stmt_error($stmt1) );
}
...

For a real production environment this approach is to talkative and dies to easily ;-)

VolkerK
  • 95,432
  • 20
  • 163
  • 226
  • the problem was with the prepare statement, so have updated the problem above. thanks – Drew Feb 09 '10 at 11:27
  • In my case the problem was the name of one of the fields that I wrote it wrong. numer instead of number, but I was getting this error and printing out the error 'mysqli_stmt_error($stmt1)' didn't help. At the end I tried thes query direct in mysql and I got there the real error and corrected it. – Ahmad Ordikhani Aug 07 '20 at 08:18
3

The problem comes from mysqli_prepare(), which in your case returns false, hence the 'boolean given' error. As your query seems ok, the error must be in $connection. Are you sure that the connection works and is defined?

The connection should be defined as something like this:

$connection = mysqli_connect("localhost", "my_user", "my_password", "world");

If the connection is properly defined, you can use echo mysqli_connect_error() to see if something went wrong. You said that the code works on another site, so perhaps you forgot to change the credentials or host?

Tatu Ulmanen
  • 123,288
  • 34
  • 187
  • 185
  • Thanks for the advice. Unfortunately I get nothing from the mysqli_connect_error(). – Drew Feb 09 '10 at 11:06