以下是一个例子:
SQL:
CREATE PROCEDURE my_sp(
IN in_var VARCHAR(32)
)
BEGIN
-- This is to avoiding the next problem:
-- If I USE bellow: EXECUTE USING in_var NOT WORK
-- But IF I USE: EXECUTE USING @user_invar WORKING GOOD
SET @user_invar = in_var;
SET @query = "SELECT * FROM my_table WHERE my_column = ? LIMIT 1;";
PREPARE stmt FROM @query;
EXECUTE stmt USING @user_invar;
SET @founded_rows = FOUND_ROWS();
DEALLOCATE PREPARE stmt;
IF(@founded_rows = 0)THEN
SELECT 'ZERO_REZULTS' AS RESULTS;
END IF;
END;
PHP:
$dbh = new PDO( $connection_params );
$sql = "CALL my_sp( :in_var )";
$stmt = $dbh->prepare( $sql );
$stmt->execute( array( ':in_var' => $_POST['in_var'] ) );
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
//No errors but $rows is an empty array if @founded_rows is 0
//espected RESULTS = ZERO_REZULTS
奇怪的是,如果我从phpmyadmin接口执行程序my_sp(),那么程序就像预期的那样工作。我得到了:
RESULTS = ZERO_REZULTS
编辑:
除了@Bill Karwin的回答之外,按照预期的方式工作,程序必须具有最后SELECT
内部stmt:
CREATE PROCEDURE my_sp(
IN in_var VARCHAR(32)
)
BEGIN
SET @user_invar = in_var;
SET @query = "SELECT * FROM my_table WHERE my_column = ? LIMIT 1;";
PREPARE stmt FROM @query;
EXECUTE stmt USING @user_invar;
SET @founded_rows = FOUND_ROWS();
IF(@founded_rows = 0)THEN
SELECT 'ZERO_REZULTS' AS RESULTS;
END IF;
DEALLOCATE PREPARE stmt;
END;
答案 0 :(得分:3)
查询需要相同数量的列的建议不是问题。存储过程生成多个不同的结果集,而不是UNION。
第一个SELECT生成零行的结果集。你仍然需要inputTensor = Input(input_shape)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(inputTensor)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded_data = MaxPooling2D((2, 2), padding='same')(x)
encoder_model = Model(inputTensor,encoded_data)
来使用这个行集,即使它是空的。"然后,您必须使用fetchAll()
前进到proc返回的下一个行集。
nextRowset()