mysql_query为SELECT语句返回TRUE

时间:2015-10-28 02:17:31

标签: php mysql

执行脚本除了调用以下函数之外什么也没做。如果我事先未插入任何内容(并且只选择整个表格),则不会发生此问题。

function create_author()
{
    $config = config();

    $database = mysql_connect($config['database']['hostname'], $config['database']['username'], $config['database']['password']);
    mysql_select_db($config['database']['database']) || die('Cannot select database');

    $table = 'authors';
    $values = array();

    $values[] = sprintf(
        'first_name = "%s"',
        mysql_real_escape_string($_POST['first_name'])
    );
    if (array_key_exists('middle_initial', $_POST) && !empty($_POST['middle_initial'])) {
        $values[] = sprintf(
            'middle_initial = "%s"',
            mysql_real_escape_string($_POST['middle_initial'])
        );
    }
    $values[] = sprintf(
        'last_name = "%s"',
        mysql_real_escape_string($_POST['last_name'])
    );
    if (array_key_exists('biography', $_POST) && !empty($_POST['biography'])) {
        $values[] = sprintf(
            'biography = "%s"',
            mysql_real_escape_string($_POST['biography'])
        );
    }

    $query = sprintf(
        'INSERT INTO %s SET %s;',
        $table,
        implode(', ', $values)
    );

    mysql_query($query, $database) || die(mysql_error());

    $genre_id = mysql_insert_id($database);

    $query = sprintf(
        'SELECT * FROM authors WHERE id = %u LIMIT 1;',
        $genre_id
    );

    echo $query, PHP_EOL, '<br />', PHP_EOL;

    $result = mysql_query($query, $database) || die('Failed to read author.');

    //header('Content-Type: application/json');
    echo '$result: ', is_bool($result) ? ($result ? 'true' : 'false') : strval($result), PHP_EOL, '<br />', PHP_EOL;
    echo 'Number of selected rows: ', mysql_affected_rows($database), PHP_EOL, '<br />', PHP_EOL;
    echo 'Error: ', mysql_error($database), PHP_EOL, '<br />', PHP_EOL;

    mysql_close($database);

    echo json_encode(mysql_fetch_assoc($result));
}

这给出了以下输出:

SELECT * FROM authors WHERE id = 27 LIMIT 1;
$ result:true
所选行数:1
错误:

警告:mysql_fetch_assoc()期望参数1为资源,第89行的 file_path.php 中给出布尔值 空

使用不同的SQL客户端,上面的SELECT查询返回一行。我使用的是PHP 5.3.3。

&#34;重复&#34;问题似乎没有回答这个问题。

在反mysql_*潮流前后,我正在使用一台我无法控制学校项目的服务器。服务器由IT部门控制。未安装pdo_mysql和mysqli扩展。此外,除了sqlite扩展之外,没有启用其他SQL扩展(由于我需要使用外键,因此不够)。系统管理员不会进行更改。关键是我别无选择,只能使用mysql_*函数。

1 个答案:

答案 0 :(得分:0)

使用||运算符将结果转换为布尔值。