MySQLi已安装,连接到数据库,有效查询在phpMyAdmin中有效,但在PHP中无效

时间:2014-05-06 19:20:55

标签: php mysql mysqli

我已经搜索了这个问题,似乎出现了多种原因。我有以下代码排除了我看到的大部分主要原因:

$conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
// check connection
if ($conn->connect_error) {
    trigger_error('Database connection failed: '  . $conn->connect_error, E_USER_ERROR);
}
if (function_exists('mysqli_query')) {
    print('installed');
}
else{
    print('not installed');
}

$sqlQuery="SELECT fname FROM `lists_users` WHERE `id`='2'";

echo $sqlQuery;

// Execute Query -----------------------------
$result = mysqli_query($conn, $sqlQuery);
if(!$result) {
    echo "Cannot do query" . "<br/>";
    exit;
}

$row = mysqli_fetch_row($result);
$count = $row[0];

if ($count > 0) {
    echo "Query works";
} else {
    echo "Query doesn't work" ."<br/>";
}

我得到的上述代码的结果是,Mysqli“已安装”,“查询无效”。我可以将上面回显的sql查询复制并粘贴到phpMyAdmin中,它会返回一行。

真的很难过这个问题可能是什么。

因此,根据YourCommonSense的建议,我提出了错误报告。我得到的错误是'mysqli class not found'。

所以做了一些谷歌搜索,并尝试了这段代码:

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
echo 'We don\'t have mysqli!!!';
} else {
echo 'Phew we have it!';
}

....它返回'Phew我们拥有它!' :\

我可以运行“php -r”new mysqli();“从命令行运行。

3 个答案:

答案 0 :(得分:2)

更改

SELECT fname FROM `lists_users` WHERE `id`='2'

SELECT fname FROM `lists_users` WHERE `id`=2

通常Ids不需要引号。

尝试这种方法

$conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* Prepare an insert statement */
$sqlQuery = "SELECT fname FROM `lists_users` WHERE `id`=?";
$stmt = mysqli_prepare($conn, $sqlQuery);

mysqli_stmt_bind_param($stmt, "i", 2);

/* Execute the statement */

if (mysqli_stmt_execute($stmt)) {
    echo "Query works";
} else {
    echo "Query doesn't work" ."<br/>";
}


/* close statement */
mysqli_stmt_close($stmt);


/* close connection */
mysqli_close($conn);

答案 1 :(得分:2)

在您的下方查询

SELECT fname FROM `lists_users` WHERE `id`='2'

您正在尝试获取 fname ,我假设它是String / Varchar类型。 在您的代码后面的行

$row = mysqli_fetch_row($result);

将返回Array和$ row [0]将获取fname(String Type)值并将其存储在$ count变量中 现在在String语句中将String与int进行比较会将String转换为int值,在我们的例子中&#34; 0&#34;并且if语句会给出错误的结果。

如果你想获取Count使用mysqli_num_rows函数(http://www.php.net/manual/en/mysqli-result.num-rows.php)。

这应该给出正确的结果。

答案 2 :(得分:0)

如果您使用mysqli程序样式,请使用mysqli_connect(),而不是new mysqli()