如何使用函数从数据库中提取多行?
我的功能是:
function search($subject, $table) {
$query = "SELECT {$subject} ";
$query .= "FROM {$table} ";
$content = mysql_query($query);
return $content;
}
在调用我的函数的页面上:
if (isset($_POST['search'])){
$search = $_POST['search'];
}
$content = search($subjectName, $tableName);
while ($results = mysql_fetch_assoc($content)){
$phrase = $results[$subjectName];
//if phrase exists in database
if (strpos($search,$phrase) !== false) {
echo $phrase;
//if phrase does not exist in database
} else {
echo 'fail';
}
此设置不起作用,但是如果我将所有内容都放入该函数中,它就可以工作:
function search($subject, $table, $where = 0, $is = 0) {
global $search;
$query = "SELECT {$subject} ";
$query .= "FROM {$table} ";
if ($where > 0) {
$query .= "WHERE {$where} = '{$is}' ";
}
$content = mysql_query($query);
while ($results = mysql_fetch_assoc($content)){
$phrase = $results[$subject];
//if phrase exists in database
if (strpos($search,$phrase) !== false) {
echo $phrase;
//if phrase does not exist in database
} else {
echo 'fail';
}
}
return $content;
}
页面上:
search('main_subject', 'main_search');
问题是我想在 if 语句中再次调用该函数以让它搜索另一个短语。有没有更简单的方法来做到这一点?
编辑:当前设置将第一个项目拉入无限循环。
最佳答案
这里应该解决许多问题:
首先,如果您尝试在字段中搜索特定的部分匹配项,您可能需要使用 SQL LIKE
构造。
SELECT field FROM table WHERE field LIKE '%search phrase%'
这样做将消除您遍历每一行以尝试对搜索短语进行字符串比较的需要,因为您只会返回与搜索短语匹配的行,仅此而已。
其次,使用global
让数据可供你的函数使用确实是很糟糕的做法。您确实应该将函数所需的任何数据作为参数传递给函数。这将包括您的搜索字符串,可能还包括您的数据库连接/对象。
function search($field, $table, $search, $db) {
...
}
第三,您现在根本没有采取任何措施来防止 SQL 注入(inject)。您需要转义输入数据,或者最好使用准备好的语句。
第四,你真的不应该使用 mysql_*
功能。它们已被弃用。尝试使用mysqli
或PDO
(我强烈建议您继续学习如何将准备好的语句与其中任何一个一起使用。)您可以从 mysqli
开始。 ,它提供类似于 mysql_*
的过程函数因此学习曲线可能不太陡峭(尽管实际上大多数有经验的开发人员更喜欢面向对象的用法)。
第五,回答你原来的问题。如果您想搜索多个短语,可以采取多种方法。您可以像这样一次传递所有短语:
SELECT field FROM table WHERE field LIKE '%search phrase%' OR field LIKE '%another search phrase%'
或者,您可以仅进行迭代函数调用来获得您想要的结果。这实际上取决于您是否只想在第一个短语不成功时搜索第二个短语(使用迭代方法),或者您是否只想在一个查询中搜索所有可能的匹配项(使用 LIKE-OR-LIKE 方法)。
关于php - 如何使用函数从 mysql 中提取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465182/