Только переменные могут быть переданы по ссылке (mysqli_stmt_bind_param) - PullRequest
1 голос
/ 22 октября 2019

У меня есть этот код, и я действительно не знаю, где ошибка. Я уже прочитал руководство по PHP и, по-видимому (как я вижу) все в порядке, есть предложения?

Я получаю сообщение об ошибке:

Неустранимая ошибка: только переменные могут передаваться по ссылкев C: \ xampp \ htdocs ... \ connect.inc.php в строке 39:

Строка 39: mysqli_stmt_bind_param($stmt, "ssssssssssssssss", '$name','$tmclocation','$nontmclocation','$countrycode','$ooffset','$toffset','$stime','$etime','$updated','$created','$alertc','$rcoby','$note','$rcogroup','$action','$workedby');

<?php
$name = $_POST['dato2'];
$tmclocation = $_POST['dato3'];
$nontmclocation = $_POST['dato4'];
$countrycode = $_POST['dato5'];
$ooffset = $_POST['dato6'];
$toffset = $_POST['dato7'];
$stime = $_POST['dato8'];
$etime = $_POST['dato9'];
$updated = $_POST['dato10'];
$created = $_POST['dato11'];
$alertc = $_POST['dato12'];
$rcoby = $_POST['dato13'];
$note = $_POST['dato14'];
$rcogroup = $_POST['dato15'];
$action = $_POST['dato16'];
$workedby = $_POST['dato17'];

        $host = "localhost";
        $dbusername = "root";
        $dbpassword = "";
        $dbname = "rco";
        // Create connection
        $conn = new mysqli ($host, $dbusername, $dbpassword, $dbname);
        if (mysqli_connect_error()){
            die('Connect Error ('. mysqli_connect_errno() .') '
                . mysqli_connect_error());
        }
        else{
            $sql = "INSERT INTO incidents (name, tmclocation, nontmclocation, countrycode, ooffset, toffset, stime, etime, updated, created, alertc, rcoby, note, rcogroup, action, workedby)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
            $stmt = mysqli_stmt_init($conn);            

            if (!mysqli_stmt_prepare($stmt, $sql)) {
                echo "There was an error.";
                exit();

            } else {
                mysqli_stmt_bind_param($stmt, "ssssssssssssssss", '$name','$tmclocation','$nontmclocation','$countrycode','$ooffset','$toffset','$stime','$etime','$updated','$created','$alertc','$rcoby','$note','$rcogroup','$action','$workedby');
                mysqli_stmt_execute($stmt);


            if ($conn->query($sql) === TRUE){
                $last_id = $conn->insert_id;
                echo "New record created successfully. Last inserted ID is: " . $last_id;
            }
            else{
                echo "Error: ". $sql ."
". $conn->error;
            }
            $conn->close();
        }
        }
?>

Надеюсь, вы поможете мне.

С уважением! Диего.

1 Ответ

1 голос
/ 22 октября 2019

Это проблема:

mysqli_stmt_bind_param($stmt, "ssssssssssssssss", '$name','$tmclocation','$nontmclocation','$countrycode','$ooffset','$toffset','$stime','$etime','$updated','$created','$alertc','$rcoby','$note','$rcogroup','$action','$workedby');

Вы правильно передали переменную "stmt".

Однако вам нужно передать "$ nontmclocation" БЕЗ одинарные кавычки.

REASON:

  • "$ nontmclocation" передает ссылку на VALUE переменной (что вы хотите)

  • "$ nontmclocation" передается в STRING LITERAL"dollar-notm -...- n '". ( НЕ что вы хотите!).

Вот хороший пример:

https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli-stmt.bind-param.html

<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');

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

$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

/* execute prepared statement */
mysqli_stmt_execute($stmt);

printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt));

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

/* Clean up table CountryLanguage */
mysqli_query($link, "DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d Row deleted.\n", mysqli_affected_rows($link));

/* close connection */
mysqli_close($link);
?>

PS: Поздравляем с выбором подготовленных выписок . Это определенно хорошо!

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