Неправильная реализация mysqli? - PullRequest
0 голосов
/ 07 февраля 2012

Я пытаюсь использовать mysqli впервые, потому что у меня есть некоторые проблемы с несколькими запросами в одном файле php. для начала я просто пытаюсь извлечь данные из хранимой процедуры и распечатать их. но, похоже, код застрял где-то и напечатал «успешно локальный», но он никогда не попадал в код под ним. Данные никогда не распечатываются и не сбои.

    <?php
$link = mysqli_init();
if (!$link) {
    die('mysqli_init failed');
}

if (!mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
    die('Setting MYSQLI_INIT_COMMAND failed');
}

if (!mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
    die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
}

if (!mysqli_real_connect($link, 'localhost', 'root', '', 'fabiola')) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

echo 'Success... ' . mysqli_get_host_info($link) . "\n";


//require 'header.php';

$resID = mysqli_real_escape_string($_REQUEST['resID']);
$materialen_id = mysqli_real_escape_string($_REQUEST['materialen_id']);
$aantal = mysqli_real_escape_string($_REQUEST['aantal']);
$effectief_gebruikt = mysqli_real_escape_string($_REQUEST['effectief_gebruikt']);
$opmerking = mysqli_real_escape_string($_REQUEST['opmerking']);
$datum_van = $_REQUEST['datum_van'];
$datum_tot = $_REQUEST['datum_tot'];


$sqm = "CALL aantal_besch_mat_van_tot($datum_van,$datum_tot,$materialen_id,$resID)";
//$result = $mysqli->query($sqm) or die('Query Failed!');

/* Select queries return a resultset */
if ($result = $mysqli->query($sqm)) {
    printf("Select returned %d rows.\n", mysqli_num_rows($result));
    /* free result set */
    mysqli_free_result($result);
}else{
    echo 'failed';
}


mysqli_close($link);

?>

1 Ответ

1 голос
/ 07 февраля 2012

Где $ mysqli установлен или инициализирован?

Должно быть что-то вроде:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

, но я не вижу его.

Кстати, странно, чтовы смешиваете соглашение о вызовах функций «mysqli_real_escape_string (...)» с объектно-ориентированными функциями «$ mysqli-> query (...)». Я не уверен, что безопасно делать и то, и другое.

Кроме того, вы избавите себя от душевных страданий, используя подготовленные операторы MySQLi вместо того, чтобы пытаться сделать все свои данные безопасными вручную, например

$query = "CALL aantal_besch_mat_van_tot(?, ?, ?, ?);";
$statement = $mysqli->prepareStatement($query);
$statement->bind_param('iiii', $datum_van, $datum_tot, $materialen_id, $resID);
$statement->execute();
//get the results.
$statement->close();
$mysqli->close();

Это намного проще и безопаснее использовать подготовленныезаявления (за счет нескольких процентов производительности), что вы действительно должны почти всегда использовать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...