Возвращаемое значение Хранимой процедуры PDO

Если кому-то интересно, я взломал версию, которая поддерживает остальную часть строки (хотя она может иметь ошибки, не слишком ее тестировала).

def text2int (textnum, numwords={}):
    if not numwords:
        units = [
        "zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
        "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
        "sixteen", "seventeen", "eighteen", "nineteen",
        ]

        tens = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]

        scales = ["hundred", "thousand", "million", "billion", "trillion"]

        numwords["and"] = (1, 0)
        for idx, word in enumerate(units):  numwords[word] = (1, idx)
        for idx, word in enumerate(tens):       numwords[word] = (1, idx * 10)
        for idx, word in enumerate(scales): numwords[word] = (10 ** (idx * 3 or 2), 0)

    ordinal_words = {'first':1, 'second':2, 'third':3, 'fifth':5, 'eighth':8, 'ninth':9, 'twelfth':12}
    ordinal_endings = [('ieth', 'y'), ('th', '')]

    textnum = textnum.replace('-', ' ')

    current = result = 0
    curstring = ""
    onnumber = False
    for word in textnum.split():
        if word in ordinal_words:
            scale, increment = (1, ordinal_words[word])
            current = current * scale + increment
            if scale > 100:
                result += current
                current = 0
            onnumber = True
        else:
            for ending, replacement in ordinal_endings:
                if word.endswith(ending):
                    word = "%s%s" % (word[:-len(ending)], replacement)

            if word not in numwords:
                if onnumber:
                    curstring += repr(result + current) + " "
                curstring += word + " "
                result = current = 0
                onnumber = False
            else:
                scale, increment = numwords[word]

                current = current * scale + increment
                if scale > 100:
                    result += current
                    current = 0
                onnumber = True

    if onnumber:
        curstring += repr(result + current)

    return curstring

Пример:

 >>> text2int("I want fifty five hot dogs for two hundred dollars.")
 I want 55 hot dogs for 200 dollars.

Могут возникнуть проблемы, если у вас есть, скажем, «200 долларов». Но это было очень грубо.

6
задан Andy Mikula 10 July 2009 в 16:52
поделиться

6 ответов

Я имел подобную проблему и смог решить ее путем возврата выполнения как так...

function my_function(){
    $stmt = $this->db->prepare("EXECUTE usp_myproc ?, ?");
    $stmt->bindParam(1, 'mystr', PDO::PARAM_STR);
    $stmt->bindParam(2, 'mystr2', PDO::PARAM_STR);
    return $stmt->execute();
}

Все, что оставляют, должно вызвать функцию с помощью переменной и затем проанализировать, сказала переменная.

$result = my_function();

можно теперь проанализировать содержание $result для нахождения информации, которую Вы ищете. Сообщите мне, помогает ли это!

0
ответ дан 17 December 2019 в 07:08
поделиться

не можете использовать SELECT для возврата результатов? Тогда вы можете использовать набор данных (набор результатов на php?), Чтобы забрать его? Я не знаю PHP, но в C # это довольно просто - используйте набор данных.

0
ответ дан 17 December 2019 в 07:08
поделиться

pretty sure PDO::exec only returns number of rows.. this would be $rs in your example

0
ответ дан 17 December 2019 в 07:08
поделиться

Попробуйте $ return_value

-1
ответ дан 17 December 2019 в 07:08
поделиться

Ознакомьтесь с MSDN для получения информации о том, как правильно привязать к этому типу вызова

Ваш PHP-код, вероятно, должен быть изменен, чтобы он выглядел примерно так. Это может сработать, только если вы звоните через ODBC, что, честно говоря, является наиболее предпочтительным способом делать что-либо с SQL Server; использовать собственный клиент SQL в системах Windows и использовать драйвер ODBC FreeTDS в системах * nix:

<?php
  $stmt = $this->db->prepare("{?= CALL usp_myproc}");
  $stmt->bindParam(1, $retval, PDO::PARAM_STR, 32);
  $rs = $stmt->execute();
  $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
  echo "The return value is $retval\n";
?>

Ключевым моментом здесь является то, что возвращаемое значение может быть привязано как параметр OUT без необходимости реструктуризации хранимых процедур.

4
ответ дан 17 December 2019 в 07:08
поделиться

Если я правильно понимаю ваш вопрос, вам не нужно вызывать fetchAll () ...

$stmt = $this->db->prepare("EXECUTE usp_myproc ?, ?");
$stmt->bindParam(1, $mystr, PDO::PARAM_STR);
$stmt->bindParam(2, $mystr2, PDO::PARAM_STR);
$rs = $stmt->execute();
echo "The return values are: $mystr , and: $mystr2";

PDOStatement :: bindParam

0
ответ дан 17 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: