Php MySql_result()要求参数1为resorce。布尔给定
我正在创建一个银行项目,并试图找到一种将资金从用户转移到用户的方法。然而,我得到了一个错误Php MySql_result()要求参数1为resorce。布尔给定,php,mysql,mysqli,Php,Mysql,Mysqli,我正在创建一个银行项目,并试图找到一种将资金从用户转移到用户的方法。然而,我得到了一个错误 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 con
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);
有什么想法吗?
谢谢
此外,在我的项目的Web前端完成之前,我不愿意更新MySqli。但是,如果您能够为我提供解决此问题的MySqli解决方案,我将不胜感激。您正在尝试添加用户名,而您可能希望将其连接起来:
$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,因此应该在查询之前执行:
$myusername = mysql_real_escape_string($myusername);
$value = mysql_result(mysql_query("SELECT money from members where username='{$myusername}'"), 0);
MySQLi
以下是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();
避免这样的构造:
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参数,而不是进行字符串连接。这样,您就不必担心动态值周围的引号。将+改为点(.),这是php连接字符,您还需要引用用户名。这将有助于解决眼前的问题。更严重的问题是,您没有检查查询中的任何返回值,这意味着如果出现问题,您无法正确处理它。您还应该考虑使用PDO或MySQL--您的代码现在对SQL注入非常开放。