-3

我正在创建一个银行项目,并且试图找到一种将资金从用户转移到用户的方法。但是我得到一个错误

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 解决这个问题的方法,那么我将不胜感激。

4

2 回答 2

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();
于 2013-10-20T19:22:03.487 回答
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 参数用于动态值,而不是进行字符串连接。那么您不必担心动态值周围的引号。

于 2013-10-20T20:18:03.377 回答