我有一个包含产品和价格的MySQL数据库表。 虽然是html表单,但我在某个php文件中获得了产品名称。 对于我想要做的文件中的操作,我还需要相应的价格。
对我来说,以下内容看起来很清楚:
$price = mysql_query("SELECT price FROM products WHERE product = '$product'");
然而,它的回声返回:
Resource id #5
代替类似的值:
59.95
似乎还有其他选择 mysqli_fetch_assoc mysqli_fetch_array 但我不能让他们输出任何有意义的东西,我不知道使用哪一个。
提前致谢。
答案 0 :(得分:13)
您需要从数据库中获取数据
$price = mysql_query("SELECT price FROM products WHERE product = '$product'");
$result = mysql_fetch_array($price);
现在您可以使用
进行打印echo $result['price'];
答案 1 :(得分:2)
如果您阅读PHP.net上的手册(link),它会告诉您该做什么。
简而言之,您使用mysql_query执行查询(就像您一样),它返回Result-Resource。要真正获得结果,您需要在结果资源上执行mysql_fetch_array
,mysql_fetch_assoc
或mysql_fetch_object
。像这样:
$res = mysql_query("SELECT something FROM somewhere"); // perform the query on the server
$result = mysql_fetch_array($res); // retrieve the result from the server and put it into the variable $result
echo $result['something']; // will print out the result you retrieved
请注意,您应该不再使用mysql扩展名;它已被正式弃用。相反,您应该使用PDO或MySQLi。 因此,执行相同过程的更好方法,但使用例如MySQLi扩展名将是:
$db = new mysqli($host, $username, $password, $database_name); // connect to the DB
$query = $db->prepare("SELECT price FROM items WHERE itemId=?"); // prepate a query
$query->bind_param('i', $productId); // binding parameters via a safer way than via direct insertion into the query. 'i' tells mysql that it should expect an integer.
$query->execute(); // actually perform the query
$result = $query->get_result(); // retrieve the result so it can be used inside PHP
$r = $result->fetch_array(MYSQLI_ASSOC); // bind the data from the first result row to $r
echo $r['price']; // will return the price
这更好的原因是它使用Prepared Statements。这是一种更安全的方法,因为它使SQL注入攻击变得不可能。想象某人是恶意用户并提供$itemId = "0; DROP TABLE items;"
。使用您的原始方法,这将导致您的整个表被删除!使用MySQLi中准备好的查询,它将返回一个错误,指出$itemId is not an integer
并且因此不会破坏您的脚本。