bahaa Posted May 3, 2012 Share Posted May 3, 2012 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 More sharing options...
HartleySan Posted May 3, 2012 Share Posted May 3, 2012 The "not equal" operator in SQL is "<>", not "!=". Link to comment Share on other sites More sharing options...
Edward Posted May 3, 2012 Share Posted May 3, 2012 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 More sharing options...
Edward Posted May 3, 2012 Share Posted May 3, 2012 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 More sharing options...
bahaa Posted May 3, 2012 Author Share Posted May 3, 2012 The "not equal" operator in SQL is "<>", not "!=". it is not the operator I ran the query on mysqlbench and it worked but when i use it in my code, it doesnt work! Link to comment Share on other sites More sharing options...
Edward Posted May 3, 2012 Share Posted May 3, 2012 I just looked this up in Larry's book, okay != (also <>) Both mean Not equal to, There you go Hartley San. Link to comment Share on other sites More sharing options...
markifornia Posted May 3, 2012 Share Posted May 3, 2012 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 1 Link to comment Share on other sites More sharing options...
Paul Swanson Posted May 3, 2012 Share Posted May 3, 2012 The error message is telling you that $stmt isn't an object. Find out if there is an error in the prepare function call by adding this below that function call: echo $mysqli->error; Check the PHP Manual for details: mysqli::$error Link to comment Share on other sites More sharing options...
bahaa Posted May 4, 2012 Author Share Posted May 4, 2012 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 More sharing options...
Larry Posted May 4, 2012 Share Posted May 4, 2012 Yeah, your prepare isn't working, which probably means there's a difference in how the local vs. live databases are set up. Link to comment Share on other sites More sharing options...
bahaa Posted May 4, 2012 Author Share Posted May 4, 2012 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 More sharing options...
Antonio Conte Posted May 4, 2012 Share Posted May 4, 2012 Sure the mysqli extension is available on your live host? Link to comment Share on other sites More sharing options...
bahaa Posted May 4, 2012 Author Share Posted May 4, 2012 Sure the mysqli extension is available on your live host? Yes it is available. Link to comment Share on other sites More sharing options...
Larry Posted May 4, 2012 Share Posted May 4, 2012 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 More sharing options...
bahaa Posted May 4, 2012 Author Share Posted May 4, 2012 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 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 More sharing options...
bahaa Posted May 4, 2012 Author Share Posted May 4, 2012 How do I change the setting so I make it case sensitive on my machine? Link to comment Share on other sites More sharing options...
Larry Posted May 4, 2012 Share Posted May 4, 2012 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 More sharing options...
Paul Swanson Posted May 4, 2012 Share Posted May 4, 2012 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 More sharing options...
bahaa Posted May 4, 2012 Author Share Posted May 4, 2012 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 More sharing options...
Edward Posted May 5, 2012 Share Posted May 5, 2012 We need to make it a rule of the thumb, when something doesn't work on MySQL check the "php.ini" file. Link to comment Share on other sites More sharing options...
Recommended Posts