MySql_result()期望参数1是资源。布尔给出

时间:2013-10-20 19:19:48

标签: 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 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修复这个问题那么我将非常感激。

2 个答案:

答案 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

这是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参数来表示动态值,而不是使用字符串连接。然后,您不必担心动态值周围的引号。