我正在尝试从用户表中获取名称和电子邮件,其中userid是我在其他地方设置的会话['id']。顺便说一句,这是一个很好的做法,将用户ID放在会话变量中吗?
编辑:进一步测试时,只有当我从users表,单列或多列中检索内容时才会出现此问题。使用WHERE email/username/name/etc =
以外的WHERE userid =
会产生相同的bind_param()错误。但这只在使用预准备语句时才会发生。并且没有错字。
准备好的陈述给了我Fatal error: Call to a member function bind_param() on a non-object
。
$sessionid = $_SESSION['id'];
// Prepare
$stmt = $conn->prepare('SELECT name, email FROM users WHERE userid = ?');
// Set Parameters
$ps_userid = $sessionid;
// Bind
$stmt->bind_param("i", $ps_userid);
// Execute
$stmt->execute();
$stmt->bind_result($mail_name, $mail_email);
$stmt->fetch();
`下面的代码很好用
$data = mysqli_query($conn, 'SELECT name, email FROM users WHERE userid='.$_SESSION["id"]);
$row = mysqli_fetch_array($data, MYSQL_ASSOC);
$mail_name = $row['name'];
$mail_email = $row['email'];
答案 0 :(得分:1)
此代码应该做得更好。我在评论中为什么会有变化。
// first test your connection is valid
if ($conn->connect_error) {
die('Connect Error: ' . $conn->connect_error);
}
// Prepare, without parentheses around question mark.
$stmt = $conn->prepare('SELECT name, email FROM users WHERE userid = ?')
or die($conn->error);
// First Set Parameters(!)
$userid = $_SESSION['id'];
// Only then: Bind
$stmt->bind_param('i', $userid);
// Execute and show error if any
$stmt->execute() or die($stmt->error);
$stmt->bind_result($mail_name, $mail_email); // needs to be this way
$stmt->fetch() or die ("no results"); // fetch is OK, but make sure you have result.
// output variables have received the result values:
echo $mail_name;
echo $mail_email;
实际上存在以下问题:
?
)。答案 1 :(得分:1)
我几乎可以肯定问题在于此代码:
// Bind
$stmt->bind_param('i', $userid);
// Set Parameters
$userid = $_SESSION['id'];
你不能绑定未定义的变量,因为bind_param会引用它,并且不能引用未定义的变量,只需交换行。
// Set Parameters
$userid = $_SESSION['id'];
// Bind
$stmt->bind_param('i', $userid);
您的评论也是关于绑定结果的,请使用$stmt->bind_result($mail_name, $mail_email);
如果你是php.net上的mysqli文档的新手是你的好朋友。只需向下滚动到some examples
即可答案 2 :(得分:0)
在绑定param之前尝试分配$userid
值,然后设置bind
// Set Parameters
$userid = $_SESSION['id'];
// Bind
$stmt->bind_param('i', $userid);