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注入非常开放。