Процедура PHP PDO - PullRequest
       14

Процедура PHP PDO

0 голосов
/ 26 сентября 2018

Я не смог найти ошибку в этом коде.Кто-нибудь может помочь?

$stmt = $DB->prepare("CALL dbo.HisIsTheProcedureName(?,?,?)");
$stmt->bindParam( 1, $_POST['Val01'], PDO::PARAM_STR,8000);
$stmt->bindParam( 2, $_POST['Val02'], PDO::PARAM_STR,8000);
$stmt->bindParam( 3, $_POST['Val03'], PDO::PARAM_STR,8000);
$stmt->execute();

После использования debugDumpParams () отображается следующий дамп:

SQL: [30] CALL dbo.InsertFeedback(?,?,?)
Params:  3
Key: Position #0:
paramno=0
name=[0] ""
is_param=1
param_type=2
Key: Position #1:
paramno=1
name=[0] ""
is_param=1
param_type=2
Key: Position #2:
paramno=2
name=[0] ""
is_param=1
param_type=2

Я не получаю никаких ошибок синтаксиса или PHP.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете использовать именованные заполнители (: name) или заполнители вопросительного знака (?) С 1-индексированной позицией параметра в bindParam().

В вашем случае вы можете попробовать удалить параметр длины в вызове bindParam(), если ваши параметры только для ввода.

$stmt = $DB->prepare("CALL dbo.HisIsTheProcedureName(?,?,?)");
$val01 = $_POST['Val01'];
$val02 = $_POST['Val02'];
$val03 = $_POST['Val03'];
$stmt->bindParam(1, $val01, PDO::PARAM_STR);
$stmt->bindParam(2, $val02, PDO::PARAM_STR);
$stmt->bindParam(3, $val03, PDO::PARAM_STR);
$stmt->execute();

Если у вас есть выходные параметры, то в соответствии с документацией, используйте это:

$val01 = $_POST['Val01'];
$val02 = $_POST['Val02'];
$val03 = $_POST['Val03'];
$stmt = $DB->prepare("CALL dbo.HisIsTheProcedureName(?,?,?)");
$stmt->bindParam(1, $val01, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 8000);
$stmt->bindParam(2, $val02, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 8000);
$stmt->bindParam(3, $val03, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 8000);
$stmt->execute();
0 голосов
/ 26 сентября 2018

Вам не нужно использовать PDOStatement::bindParam(), за исключением особых случаев.Просто передайте параметры PDOStatement::execute().Что касается вашего вопроса, возможно, вы пропустили некоторые значения POST.Убедитесь, что вы передаете действительные строки в запрос, и проверьте возвращаемые значения.

$val01 = $_POST["Val01"] ?? "";
$val02 = $_POST["Val02"] ?? "";
$val03 = $_POST["Val03"] ?? "";

$stmt = $DB->prepare("CALL dbo.HisIsTheProcedureName(?,?,?)");
if ($stmt) {
    $result = $stmt->execute([$val01, $val02, $val03]);
    if (!$result) {
        //look at error messages
    }
} else {
    // look at error messages
}
...