Jump to content

PHP PDO variable not working in query but static value works


ArshSingh
Go to solution Solved by kicken,

Recommended Posts

Can I see the output of:

SHOW FULL COLUMNS FROM members

Run this statement via your mysql gui tool, phpmyadmin, mysql workbench or whatever you want.

PS: Are you sure you're working on your local machine and your db server is a local one?

 

 

yes im working on localhost and also my db is on local as i'm using MAMP PRO for mac ,, and btw , i do have also other functions which are working with databse and doing their work successfully and getting the result from database expect this one.

 

will get you the columns structure.

Edited by ArshSingh
Link to comment
Share on other sites

  • Solution

public function profile_view($user_id = null) {
	$stmt = $this->_db->prepare('SELECT memberID,username,email,profile_pic,active FROM members WHERE memberID = :user_id AND active="YES"');

	$params = array(':user_id' => $user_id);
	var_dump($params);
	$stmt->execute($params);

	$row = $stmt->fetch(PDO::FETCH_ASSOC);
	var_dump($row);
	if ($row){
		$user_det = (object)array(
			'username'=> $row['username']
			,'email'=>$row['email']
			,'profile_pic'=>$row['profile_pic']
			,'id'=> $row['memberID']
			,'active'=>$row['active']
		);

		return $user_det;
	}
	else {
		var_dump($stmt->errorInfo());
	}
}

Since you only want one row, there is no need for the loop. Check the return value of the fetch call to be sure a row was actually found. I've added a few var_dumps at places that might be helpful in resolving your problem.

Link to comment
Share on other sites

the symptom you are seeing is likely due to a page being requested twice, once with and once without the expected input data. and given that you are doing url rewriting, with your locahost/easy/u/5, this is even more likely.

 

if you look in your web server's access log, i'm betting you have two requests for your page, one with and one without the correct get query string on it. you may even have a get query string that has added a space character as part of the value. if so, it's possibly due to a faulty url rewriting rule, or your page redirecting to itself a second time, or the browser requesting the page twice.

 

however, ALL code should ALWAYS validate data before trying to use it. you need to make sure there's an expected value for the user id before ever calling the class method. making sure that the value contains all numerical characters (see ctype_digit()) and is not an empty string will at least verify that it contains a likely user id.

 

also, why are you using a default $user_id = null call time parameter for a function that requires a value for that parameter to work (defining default parameter values are intended for optional parameters, where the function will still perform its intended purpose when the parameter is not present), assigning one variable to another ($user = $user_id;), and then looping over a result set that by definition will at most be one row? when we see code that contains extra lines and statements that don't accomplish anything useful, we wonder what you were thinking when you typed those things into your code? code should just contain those things that are necessary and that contribute to the goal that code is trying to accomplish.

Link to comment
Share on other sites

  • 2 weeks later...
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.