Hello

Hopefully someone can help me.

I am trying to update fields in a mysql database using ruby with dbi, but no matter what I try, i just cannot update the row.

I am able to search it, but never update.

I search for the right string, then open a file, search for that string and then update the mysql row. but the update part will not work.

here is the code:

#!/usr/bin/ruby

require 'dbi'
require 'mysql'

# quit unless our script gets two command line arguments
unless ARGV.length == 1
  puts "Wrong number of arguments\n"
  puts "Usage: ruby mysql-test*.rb csv_file\n"
  exit
end

dbh = DBI.connect('DBI:Mysql:testlink', 'user', 'passwd')

query = dbh.prepare("SELECT field_id, node_id, value FROM cfield_design_values ORDER BY node_id;")
query.execute()
while row = query.fetch() do
	printf "field_id = %d, node_id = %d, value = %s \n", row[0], row[1], row[2]
	if ( row[0] == 7 ) 
		puts "we have a match"
		if row[2].empty? 
			puts "Nothing to parse"
		else
			puts "Something to parse"
			
			# Set up an empty array
			databaseArray = []
			
			# Split the web address in the database into the array
			databaseArray = row[2].split("/")
				
			# Check the end value
			$databaseSplit = databaseArray.last
			puts "value of the last element of the array = #$databaseSplit"
				
			if $databaseSplit.include?("DispForm") 
			
				puts "Disp form found"
				
				# set up an array for the string
				
				$fileArray = []
				$fileHTTParray = []
					
				# open the file for reading
				puts "opening the file"
					
				# Create a bool for breaking when a match is found
				$matchFound = false
					
				File.open(ARGV[0], "r") do |file|
				while line = file.gets
							
					# Break from the loop when a match is found
					break(line) if $matchFound == true
							
					#puts "matchFound in the first part of the loop is #$matchFound"
							
					# Split the line of the file into an array							
					$fileArray = line.split(",")
					
					# Put into a new variable
					fileSplit = $fileArray[2]
							
					# Split it into another array
					$fileHTTParray = fileSplit.split("/")
							
					# put into a variable for comparison
					$fileCompare = $fileHTTParray.last
						
					# Compare with the value from database
					#puts "#$databaseSplit, #$fileCompare"
					
					if ( $databaseSplit == $fileCompare)
						puts "WE HAVE A MATCH !!!! \n"
						
						printf "row[2] = %s\n", row[2]
						puts "filearray[4] = #$fileArray[4]\n"
						
						row[2] = $fileArray[4]
								
						printf "row[2] = %s\n", row[2]
						printf "row[0] = %d\n", row[0]
						printf "row[1] = %d\n", row[1]
						
						$field_id = row[0] 
						$node_id = row[1]
						$value = row[2]
								
						# Change the value contained in the field node
                                                dbh.do("UPDATE cfield_design_values SET value=? WHERE field_id=? && node_id=?", $value, $field_node, $node_id)
						$matchFound = true
						else
							#puts "They do not match"
							$matchFound = false
						end
					end
				end
			else
				puts "Filename found"				
			end						
		end
	end
end
dbh.disconnect

use the word "AND" in your update SQL rather than &&

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.