在mysql查询中传递php变量作为参数时出现问题

时间:2013-12-26 12:23:23

标签: php html mysql database

我在查询mysql数据库时尝试使用php变量作为搜索词,首先我从HTML表单中获取变量:

<?php
//Create variables
$vals = array($_POST["id_number"], $_POST["id_name"], $_POST["id_submitname"]);
$keys = array('idno_1', 'name_2', 'subname_3');
//combine keys to arrays
$var = array_combine($keys, $vals);
//santise variables
$variables = filter_var_array($var, FILTER_SANITIZE_STRING);
$idno = $variables['idno_1'];
$name = $variables['name_2'];
$subname = $variables['subname_3'];

连接到数据库后,我运行查询:

  //Select entry from table and display
if (!$idno == '')
    {
    $sql = "SELECT * FROM `healthsafety` WHERE ID = '$idno'";
    $result = mysqli_query($connection, $sql);
    }
elseif (!$name == '')
    {
        $result = mysqli_query($connection, "SELECT * FROM `healthsafety` WHERE LOWER (nameinvolved) = LOWER ('$name')");
    }
else
    {
        $result = mysqli_query($connection, "SELECT * FROM `healthsafety` WHERE LOWER (submitbyname) = LOWER ('$subname')");
    }

$row = mysqli_fetch_array($result, MYSQLI_ASSOC);

它没有从db返回任何内容,当我选择* FROM而不尝试将变量用作搜索时它显示所有条目ok,我在将变量传递给查询时出错了吗?我尝试了不同的引号组合,返回标记和查询使用其他变量。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

LOWER是一个函数,参数需要包含在括号中。

您的查询应如下所示:

$result = mysqli_query($connection, "SELECT * FROM `healthsafety` 
WHERE LOWER(nameinvolved) = LOWER('$name')");

为了便于调试,我首先打印出查询:

$query = "SELECT * FROM `healthsafety` 
WHERE LOWER(nameinvolved) = LOWER('$name')";
echo $result;

...然后使用MySQL Interactive shell或使用phpMyAdmin等Web界面手动运行它。这可以帮助您进一步隔离问题,然后找出问题所在。

答案 1 :(得分:0)

首先,您需要确保所有数据都正确无误。然后试试这个:

if (isset($idno) &&  !$idno == '')
        {
        $sql = "SELECT * FROM `healthsafety` WHERE ID = $idno";
        $result = mysqli_query($connection, $sql);
        }
    else if (isset($name) && !$name == '')
        {
            $result = mysqli_query($connection, "SELECT * FROM `healthsafety` WHERE LOWER (nameinvolved) = LOWER ('$name')");
        }
    else
        {
            $result = mysqli_query($connection, "SELECT * FROM `healthsafety` WHERE LOWER (submitbyname) = LOWER ('$subname')");
        }

    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);