我正在创建一个银行项目,我正在努力想方设法将钱从用户转移到用户。但是我得到了
的错误Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\wamp\www\new\panel\transmoney.php on line 18
使用此代码的加长版本:
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$amount = $_POST["amount"];
$recipient = $_POST["name"];
$myusername=$_SESSION['myusername'];
$value = mysql_result(mysql_query("SELECT money from members where username=" + $myusername), 0);
print($value);
第18行等同于
$value = mysql_result(mysql_query("SELECT money from members where username=" + $myusername), 0);
有什么想法吗? 感谢
此外,我不愿意更新到MySqli,直到我的项目Web-Frontend完成,但是如果你能够给我一个MySqli修复这个问题那么我将非常感激。
答案 0 :(得分:2)
您正在尝试添加用户名,而您可能希望将其连接起来:
$value = mysql_result(mysql_query("SELECT money from members where username='" . $myusername . "'"), 0);
或者您可以使用字符串插值:
$value = mysql_result(mysql_query("SELECT money from members where username='{$myusername}'"), 0);
无论哪种方式,只需确保$myusername
在运行查询之前是安全的。由于您尚未使用MySQLi,因此您应该在查询之前执行mysql_real_escape_string
:
$myusername = mysql_real_escape_string($myusername);
$value = mysql_result(mysql_query("SELECT money from members where username='{$myusername}'"), 0);
这是MySQLi中的相同代码,虽然我的返回一个关联数组:
<?php
$mysqli = new mysqli($host, $username, $password, $db_name);
if ($mysqli->connect_errno) {
die('Cannot connect to database');
}
$stmt = $mysqli->prepare("SELECT money FROM members WHERE username=?");
$stmt->bindParam('s', $myusername);
$stmt->execute();
$results = $stmt->get_result();
while($money = $results->fetch_assoc()) {
print_r($money);
}
$mysqli->close();
答案 1 :(得分:0)
避免像这样的结构:
mysql_result(mysql_query(...))
不保证mysql_query()函数返回资源。如果出现错误,它会返回 false ,您应该每次检查此并报告错误。否则你不知道出了什么问题,你必须发布到StackOverflow才能找到答案。 :-P
if (($result = mysql_query(...)) === false) {
trigger_error(mysql_error(), E_USER_ERROR);
}
$value = mysql_result($result, 0);
正如@ rink.attendant.6所示,错误的根本原因是您使用+
作为字符串连接运算符,这在PHP中无效。它在Java和其他一些语言中都没问题。
其他人评论说你应该使用SQL参数来表示动态值,而不是使用字符串连接。然后,您不必担心动态值周围的引号。