Jump to content
Larry Ullman's Book Forums

Is There Any Problems Wit This Query?


Recommended Posts

Hi,

 

I have this query and it keeps giving me Fatal error: Call to a member function bind_param() on a non-object.

The name of the fields are correct and the connetions is set properly.

 

 

 

$sql ="SELECT UserID From user WHERE UserID != ? AND Email = ? ";

 

//prepare stmt

$stmt = $mysqli->prepare($sql);

 

//bind param

$stmt->bind_param('is',$ID, $Email);

 

//execute the query

$stmt->execute();

Link to comment
Share on other sites

I just run this query on my users database with the mysql phpmyadmin

 

SELECT user_id FROM users WHERE user_id != 2 AND email = 'example@email.com'

 

I got success with it

 

Showing rows 0 - 0 ( 1 total, Query took 0.0006 sec)

Link to comment
Share on other sites

The "not equal" operator in SQL is "<>", not "!=".

 

Ive used != quite a bit in the recent exercises i was doing, possibly this is because mysql could have different functions to other SQL software, there is also mssql for example!

Link to comment
Share on other sites

I just looked this up in Larry's book, okay

 

!= (also <>) Both mean Not equal to,

 

There you go Hartley San.

 

I'm just chiming in here learning any way I can. But you can definitely use != operator in SQL statements. Larry's book page 271, I have actually used the method there to check if emails aren't already taken.

 

Here is the SQL statement:

$q = "SELECT user_id FROM users WHERE email="$e" AND user_id !="$id";

 

I haven't gone into OOP yet, but perhaps your issue lies here:

 

//bind param

$stmt->bind_param('is',$ID, $Email);

 

Have you tried binding them this way?

 

 

// Prepare

$stmt = mysqli_prepare($dbc, $sql);

 

// Bind

mysqli_stmt_bind_param($stmt, 'is', $ID, $Email);

 

You can start debugging this way.

 

-M

  • Upvote 1
Link to comment
Share on other sites

No luck and the odd thing I deployed my files online and I don't get everything working as I do locally.

 

I have used a prepare statement inside a loop and bind param to the nested prepare statement. the first statement works fine but the one inside the loop it doesn't work though it works locally

Link to comment
Share on other sites

Yeah, your prepare isn't working, which probably means there's a difference in how the local vs. live databases are set up.

 

What do you suggest in this situation ?

 

I have the same problem with another non prepared query.

The problem is with the query inside the loop.

 

in the first query I get the question and inside the loop I get the answer for each question using the question id

 

this query works on my machine but it doesn't work online.

 

<?php

$sql ="SELECT SurveyID, SurveyName

FROM survey LIMIT 1";

$result = $mysqli->query($sql);

$rec = $result->fetch_array();

$SurveyID = $rec['SurveyID'];

$SurveyName = $rec['SurveyName'];

echo "<h2 class=\"SurveyName\"> $SurveyName</h2>";

 

$sql ="SELECT QuestionID, Question

FROM question

WHERE SurveyID ='".mysqli_real_escape_string($mysqli, $SurveyID)."'";

$result = $mysqli->query($sql);

$ID = array();

while($rec = $result->fetch_array())

{

$QuestionID = $rec['QuestionID'];

echo "<span class=\"Question\">". $rec['Question']. "</span>";

$ID[] = $rec['QuestionID'];

$_SESSION['Questions'] = $ID;

 

echo "<input type=\"hidden\" name=\"ID[]\" value=\"{$QuestionID}\"/>";

///Get answers

$sqlAnswer ="SELECT AnswerID, Answer, VoteCount

FROM Answer WHERE QuestionID ='".mysqli_real_escape_string($mysqli, $QuestionID)."'";

$AnswerResult =$mysqli->query($sqlAnswer);

 

//fetch the result

while($rec = $AnswerResult->fetch_array())

{

$AnswerID = $rec['AnswerID'];

$Answer = $rec['Answer'];

$VoteCount = $rec['VoteCount'];

echo "<input type=\"radio\" name=\"QuestionID[$QuestionID]\" value=\"{$AnswerID}\" id=\"{$QuestionID}\"";

if(isset($_COOKIE[$SurveyID]))

{

echo "disabled";

}

echo "/> $Answer<br />";

}

}

?>

Link to comment
Share on other sites

You don't have any error reporting at all. My suggestion would be to add code that:

A) Tests for a positive result before continuing

B ) Reports the MySQL error (during development, not production) should there be a negative result.

Link to comment
Share on other sites

You don't have any error reporting at all. My suggestion would be to add code that:

A) Tests for a positive result before continuing

B) Reports the MySQL error (during development, not production) should there be a negative result.

 

Thanks for the tip

the problem was with using capital letter for the name of the table in my query.

on my machine the name of the tables case insensitive and on the production it is case sensitive

Link to comment
Share on other sites

Offhand, I don't know. I *believe* it's based upon the operating system, because tables are references to files. So if the OS is case-sensitive, the DB is, too.

 

My best advice with everything is to always act as if everything will be case sensitive.

Link to comment
Share on other sites

I believe the default with newer versions of MySQL is now to only allow lower-case table names. You can change that by adding the following to my.ini:

# added to support upper-case letters in tablenames
lower_case_table_names=0

That solved a problem with not being able to create table names with upper-case letters for me using MySQL 5.0.8 dev client on Windows 7. You will have to stop and restart MySQL for the changes to take effect, of course.

 

I was going to suggest that your query may be failing because it appears that you are quoting SurveyID and QuestionID, which I would have expected to be integers, not strings.

Link to comment
Share on other sites

I believe the default with newer versions of MySQL is now to only allow lower-case table names. You can change that by adding the following to my.ini:

# added to support upper-case letters in tablenames
lower_case_table_names=0

That solved a problem with not being able to create table names with upper-case letters for me using MySQL 5.0.8 dev client on Windows 7. You will have to stop and restart MySQL for the changes to take effect, of course.

 

I was going to suggest that your query may be failing because it appears that you are quoting SurveyID and QuestionID, which I would have expected to be integers, not strings.

 

I don't use upper case for the table's name but by mistake in my query I used upper case for my table name in one of the functions.

 

Everything worked fine after i fixed that problem.

Link to comment
Share on other sites

 Share

×
×
  • Create New...